首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMockit -模拟响应InputStream正在被JMockit读取

JMockit -模拟响应InputStream正在被JMockit读取
EN

Stack Overflow用户
提问于 2016-09-20 22:03:18
回答 1查看 1.2K关注 0票数 1

为了避免在单元测试期间进行网络调用,我使用了一种我正在嘲弄的方法,它如下所示:

代码语言:javascript
复制
InputStream sendRequestAndReturnResponseStream(String param1, Map<String, String> param2)

我在JMockit中使用以下方法对其进行了模拟:

代码语言:javascript
复制
final InputStream byteStream = new ByteArrayInputStream("MyTestString".getBytes(StandardCharsets.UTF_8));
new NonStrictExpectations()
{
  {
    mockHttpClient.sendRequestAndReturnResponseStream(anyString, null);
    result = byteStream;
  }
};

当我在测试代码中创建ByteArrayInputStream,然后将它交给NonStrictExpectation时,它的内部pos字段被设置为0,这是我所期望的,因为它还没有编写。但是,当JMockit返回模拟方法的结果时,对象中的pos字段被设置为流的大小,这使得数组看起来已经被读取了,大概是由JMockit中的某个东西读取的。

对于在测试代码中的定义与JMockit返回调用代码之间更改对象的内部可变状态而言,这似乎是一种奇怪的行为。JMockit在把这个InputStream交给我的代码之前真的读过它吗?如果是的话,有什么方法可以阻止这种行为吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-21 16:20:57

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

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39604429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档