Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMockit-JMockit正在读取模拟响应InputStream_Java_Jmockit - Fatal编程技术网

Java JMockit-JMockit正在读取模拟响应InputStream

Java JMockit-JMockit正在读取模拟响应InputStream,java,jmockit,Java,Jmockit,我有一个我正在模仿的方法,以避免在单元测试期间进行网络调用,它看起来像这样: InputStream sendRequestAndReturnResponseStream(String param1, Map<String, String> param2) 当我在测试代码中创建ByteArrayInputStream,然后将其提供给NonStrictExpectation之前,它的内部pos字段设置为0,这是我所期望的,因为它还没有被写入。然而,当JMockit从mocked方法返

我有一个我正在模仿的方法,以避免在单元测试期间进行网络调用,它看起来像这样:

InputStream sendRequestAndReturnResponseStream(String param1, Map<String, String> param2)
当我在测试代码中创建ByteArrayInputStream,然后将其提供给NonStrictExpectation之前,它的内部pos字段设置为0,这是我所期望的,因为它还没有被写入。然而,当JMockit从mocked方法返回结果时,对象内的pos字段被设置为流的大小,使得数组似乎已经被读取,可能是被JMockit内的某个东西读取的


在测试代码中的定义和JMockit返回调用代码之间更改对象的内部可变状态,这似乎是一种奇怪的行为。JMockit在将这个InputStream提供给我的代码之前真的读取了它吗?如果是这样,有没有办法关闭此行为?

我无法重现此问题(使用JMockit 1.27)。以下测试通过:

public class ExampleTest
{
    static class HttpClient {
        InputStream sendRequestAndReturnResponseStream(
            String param1, Map<String, String> param2) { return null; }
    }

    @Test
    public void returnUnchangedByteArrayInputStream(
        @Mocked final HttpClient mockHttpClient
    ) throws Exception {
        final InputStream byteStream = 
            new ByteArrayInputStream("MyTestString".getBytes(StandardCharsets.UTF_8));
        int originalCountMinusPos = byteStream.available(); // = 12 (count) - 0 (pos) = 12

        new Expectations() {{
            mockHttpClient.sendRequestAndReturnResponseStream(anyString, null);
            result = byteStream;
        }};

        InputStream result = mockHttpClient.sendRequestAndReturnResponseStream("", null);
        int currentCountMinusPos = result.available(); // different iif pos changed

        assertSame(byteStream, result);
        assertEquals(originalCountMinusPos, currentCountMinusPos);
    }
}
公共类示例测试
{
静态类HttpClient{
InputStream sendRequestAndReturnResponseStream(
字符串param1,映射param2){return null;}
}
@试验
public void returnUnchangedByteArrayInputStream(
@模拟最终HttpClient模拟HttpClient
)抛出异常{
最终输入流ByTestStream=
新的ByteArrayInputStream(“MyTestString.getBytes(StandardCharsets.UTF_8));
int originalCountMinusPos=byteStream.available();//=12(计数)-0(位置)=12
新期望(){{
mockHttpClient.sendRequestAndReturnResponseStream(任意字符串,null);
结果=byteStream;
}};
InputStream结果=mockHttpClient.sendRequestAndReturnResponseStream(“,null);
int currentCountMinusPos=result.available();//不同的iif位置已更改
资产相同(通过测试流程,结果);
assertEquals(OriginalCountMinsPos、CurrentCountMinsPos);
}
}
public class ExampleTest
{
    static class HttpClient {
        InputStream sendRequestAndReturnResponseStream(
            String param1, Map<String, String> param2) { return null; }
    }

    @Test
    public void returnUnchangedByteArrayInputStream(
        @Mocked final HttpClient mockHttpClient
    ) throws Exception {
        final InputStream byteStream = 
            new ByteArrayInputStream("MyTestString".getBytes(StandardCharsets.UTF_8));
        int originalCountMinusPos = byteStream.available(); // = 12 (count) - 0 (pos) = 12

        new Expectations() {{
            mockHttpClient.sendRequestAndReturnResponseStream(anyString, null);
            result = byteStream;
        }};

        InputStream result = mockHttpClient.sendRequestAndReturnResponseStream("", null);
        int currentCountMinusPos = result.available(); // different iif pos changed

        assertSame(byteStream, result);
        assertEquals(originalCountMinusPos, currentCountMinusPos);
    }
}