如何对改装回调进行单元测试?

时间:2016-05-14 16:48:36

标签: android unit-testing retrofit retrofit2 okhttp3

我试图为android中的改造2回调创建最完整的案例。我用于测试mockito,MockWebServer和MockResponse。

readv

我最潇洒的课程:

public class LoginFragment extends Fragment {
/**
     * Actualiza el numero telefonico para el usuario
     *
     * @param phoneNumber
     */
    public  void phoneNumber(String phoneNumber) {
        HttpService service = Service.createService(HttpService.class, TOKEN);
        Call<Void> call = service.phonumber(phoneNumber, new User("", ""));
        call.enqueue(callback());
    }

    /**
     * @return Callback<Void>
     */
    public Callback<Void> callback() {
        return new Callback<Void>() {
            @Override
            public void onResponse(Call<Void> call, Response<Void> response) {
                if (response.isSuccessful()) {
                    dummy();
                } else {
                    Log.e(TAG, "problema");
                }
            }

            @Override
            public void onFailure(Call<Void> call, Throwable t) {
                Log.e(TAG, " " + t);
            }
        };
    }

    public void dummy(){
        System.out.println(" called");
    }
}

但是当你进行测试时我得到了:

@RunWith(MockitoJUnitRunner.class)
public class TestLoginFragment {
   MockWebServer mockWebServer;

    @Before
    public void setup() throws Exception {
        spyLoginFragment = mock(LoginFragment.class);
        mockWebServer = new MockWebServer();
    }


    @Test
    public void testDummyIsCalled() {
        spyLoginFragment.phoneNumber("3333335");
        mockWebServer.enqueue(new MockResponse().setResponseCode(201));
        verify(spyLoginFragment, times(1)).dummy();
    }
}

我正在进行新的回调测试,如何验证是否已调用TestLoginFragment > testDummyIsCalled FAILED Wanted but not invoked: loginFragment.dummy();

1 个答案:

答案 0 :(得分:0)

根据定义,单元测试仅测试单元本身的功能。因此,它可能无法捕获集成错误。

您不应该测试改造框架或其回调,您必须假设改造始终有效。仅测试您的代码,因此为phoneNumber(String phoneNumber)创建一个测试,检查服务是否配置正确(不需要启动改造服务),并创建其他测试以检查OnSuccess或OnFailure案例中服务器的可信响应。

PD:如果你想测试Retrofit调用和回调方法之间的耦合,那你就是在讨论“集成测试”。