Glo*_*tor 6 java json mocking mockito
我有一个存根JSON OBJECT但需要使用Mockito模拟以下内容:
HttpResponse response = defaultHttpClient.execute(postRequest);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuilder result = new StringBuilder();
while ((line = rd.readLine()) != null) {
result.append(line);
}
JSONObject jsonResponseObject = new JSONObject(result.toString());
Run Code Online (Sandbox Code Playgroud)
我创建了以下Mocks:
@Mock
private HttpClient mockHttpClient;
private HttpPost mockHttpPost;
private HttpResponse mockHttpResponse;
private HttpEntity mockHttpEntity;
private InputStream mockInputStream;
private InputStreamReader mockInputStreamReader;
private BufferedReader mockBufferedReader;
Run Code Online (Sandbox Code Playgroud)
并有以下when声明:
Mockito.when(mockHttpClient.execute(mockHttpPost)).thenReturn(mockHttpResponse);
Mockito.when(mockHttpResponse.getEntity()).thenReturn(mockHttpEntity);
Mockito.when(mockHttpEntity.getContent()).thenReturn(mockInputStream);
Run Code Online (Sandbox Code Playgroud)
问题:我是否需要创建所有这些'when'语句,如果是,那么我需要创建哪些其他语句才能获得存根JSON?
有什么建议吗?
谢谢
您可能要嘲笑HttpClient和HttpResponse,如果他们是接口(虽然,这取决于你的图书馆,你可以使用MockHttpClient或MockHttpResponse),但你不应该被嘲笑别的.
为什么?
模拟是在我们无法具体的类上建立预期的输出行为,或者更确切地说,我们想要以特定方式为这个特定的测试实例行事的类.您希望确保从模拟中获得正确的响应HttpClient,并且在response.getEntity()调用时,它会返回有意义的响应HttpEntity.你可以选择嘲笑或不嘲笑; 我个人不会,因为模拟不添加任何额外的值(除了可能验证特定方法被调用).
其他所有内容都是具体的实现 - 您应该允许其他对象与先前模拟的元素的结果进行交互,以确保它们的行为与没有模拟时的行为相同.
实际上......你真的不能嘲笑那些,除非你传递它们或以某种方式注入它们.我强烈反对你试图模仿new该方法中的任何ed对象.
你没有具体说明你所宣称的内容,但我希望你能JSONObject以某种身份来表达它.我断言你希望放入它的内容实际上是将它放入JSON对象中,并且还验证你的模拟对象是按照你期望的方式调用和调用的.
@Mock顺便说一句,你的注释不是级联的 - 你必须用所有模拟的字段注释@Mock,然后使用或者使用注释测试类@RunWith(MockitoJunitRunner.class)(或者使用MockitoAnnotation.initMocks(this)其中一个;除了在边缘情况下,两者都不是必需的).如果选择注释,请不要忘记@InjectMocks测试对象.
最后,你的when条件会做我期望他们做的事情 - 那些应该没问题.
是的,您可能需要您提到的所有 when 语句。但是mockInputStream您可以返回而不是返回new ByteArrayInputStream( "{foo : 'bar'}".getBytes() )
最后,您可以验证 json 响应对象是否具有值为“bar”的“foo”属性。
也就是说,我不确定给定的方法是否值得测试 - 因为它所做的只是打开流并读取数据。
| 归档时间: |
|
| 查看次数: |
24634 次 |
| 最近记录: |