【问题标题】:How to do unit testing for retrofit2 callbacks?如何对 Retrofit2 回调进行单元测试?
【发布时间】:2016-09-12 12:18:47
【问题描述】:

我想做一个单元测试来验证是否调用了 function1()function2()。我以前没有处理过回调,你能告诉我怎么做吗?

public void sendData(HttpService service, Document userData) {
    Call<String> call = service.updateDocument(getId(), userData);

    call.enqueue(new Callback<String>() {
    @Override
    public void onResponse(Call<String> call, Response<String> response) {
        function1(response.code());
    }

    @Override
    public void onFailure(Call<String> call, Throwable t) {
        function2();
    }
    });
}

【问题讨论】:

    标签: android unit-testing mockito powermock retrofit2


    【解决方案1】:

    我无法尝试,但它应该可以。也许你必须修复泛型类型 像 mock(Call.class); 这样的转换错误。

    @Test
    public void should_test_on_response(){
        Call<String> onResponseCall = mock(Call.class);
    
        doAnswer(invocation -> {
            Response response = null;
            invocation.getArgumentAt(0, Callback.class).onResponse(onResponseCall, response);
            return null;
        }).when(onResponseCall).enqueue(any(Callback.class));
    
        sendData(....);
    
        // verify function1
    }
    
    @Test
    public void should_test_on_failure(){
        Call<String> onResponseCall = mock(Call.class);
    
        doAnswer(invocation -> {
            Exception ex = new RuntimeException();
            invocation.getArgumentAt(0, Callback.class).onFailure(onResponseCall, ex);
            return null;
        }).when(onResponseCall).enqueue(any(Callback.class));
    
        sendData(....);
    
        // verify function2
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多