【发布时间】:2016-09-10 19:01:53
【问题描述】:
我正在尝试为 android 中的改造 2 回调创建统一案例。我用于测试 mockito、MockWebServer 和 MockResponse。
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();
我是新人做回调测试,如何验证dummy()被调用了?
【问题讨论】:
-
如果只调用execute()会简单很多,它会同步执行请求。你打算做什么测试?其余客户端是否正常工作,或者您的应用对其成功/失败的响应?
-
嗨@fractalwrench,我正在尝试测试响应(成功/失败),检查是否调用了functon dummy()。如何调用 execute() ?
-
只需调用.execute(),如果您不确定execute() 和enqueue() 之间的区别,则值得查看改造文档
-
我是片段上的 execute() 和 enqueue() 之间的区别,需要异步调用,但是如何在片段登录中对改造回调进行单元测试?例如检查 onResponse 和 onFailure
标签: android unit-testing retrofit retrofit2 okhttp3