如何对具有返回值并依赖于我的其他类的方法进行单元测试?

时间:2016-02-17 03:50:40

标签: java unit-testing testing

我是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));
}

我只验证重要的依赖模拟对象是否正确交互。我应该验证返回的值吗?

希望有人可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用MockitoJMock之类的任何模拟框架来模拟响应。

您不必验证JsonParser返回的实际值,因为您没有为JsonParser编写单元测试,而是为您的班级编写。

如果您想验证任何模拟被调用的次数,那么您可以这样做:

verify(converter, Mockito.times(1)).decrypt(eq(dummyResponse));

如果您的模拟根本没有被调用或被多次调用,这将失败。