我是java单元测试的新手。如何对具有返回值并依赖于我的其他类的方法进行单元测试?
以下代码将ResponseBody
转换为对象。 parser.fromJson(json, type)
和decodeToJson(value)
是我的自定义方法。
我该如何对方法convert(ResponseBody)
进行单元测试?
public class MyConverter<T> {
public MyConverter(JsonParser parser, Type type, Cipher cipher) {
this.parser = parser;
this.type = type;
this.cipher = cipher;
}
public T convert(ResponseBody value) throws IOException {
String json;
if (cipher == null) {
json = value.string();
} else {
json = decrypt(value);
}
return parser.fromJson(json, type);
}
public String decrypt(ResponseBody value) {
//Just decrypt the ResponseBody to String.
...
}
}
我已经有了一些测试代码。这是我的测试用例。
@Test
public void testConvert_withCipher() throws Exception {
converter = spy(new MyConverter(mockParser, mockType, null));
ResponseBody dummyResponse = ResponseBody.create(MediaType.parse("application/json"), "{text:'Dummy response'}");
converter.convert(dummyResponse);
verify(converter).decrypt(eq(dummyResponse));
verify(mockParser).fromJson(anyString(), eq(mockType));
}
我只验证重要的依赖模拟对象是否正确交互。我应该验证返回的值吗?
希望有人可以帮助我,谢谢!
答案 0 :(得分:0)
您可以使用Mockito
或JMock
之类的任何模拟框架来模拟响应。
您不必验证JsonParser
返回的实际值,因为您没有为JsonParser
编写单元测试,而是为您的班级编写。
如果您想验证任何模拟被调用的次数,那么您可以这样做:
verify(converter, Mockito.times(1)).decrypt(eq(dummyResponse));
如果您的模拟根本没有被调用或被多次调用,这将失败。