我是Android测试的新手,我在测试活动在API调用结果后打开另一个活动时遇到了一些问题。
我粘贴了调用代码和成功时调用的回调:
Api.get_instance(this).login(Constants.API_USER, Constants.API_PASSWORD, this, Constants.API_REQUEST_CODE_LOGIN);
当答案从服务器返回时:
@Override
public void onTaskCompleted(int requestCode, List result) {
ServiceResponse s;
JSONObject j;
switch (requestCode) {
case Constants.API_REQUEST_CODE_LOGIN:
s = (ServiceResponse) result.get(0);
j = (JSONObject) s.get_extras();
try {
...
startHomeActivity();
} catch (JSONException e) {
e.printStackTrace();
}
break;
}
}
如果一切正常,我打电话给#34; startHomeActivity"
问题是在测试时,我得到一个空指针异常,因为测试不等待响应。
我尝试过使用mockito,但我得到了一个通缉但未使用以下代码调用:
@Test
public void afterSplash_shouldStartHomeActivity() {
Mockito.verify(mockApi).login(Constants.API_USER, Constants.API_PASSWORD, new AsyncTaskCompleteListener() {
@Override
public void onTaskCompleted(int requestCode, List result) {
ShadowActivity shadowActivity = shadowOf(activity);
Intent startedIntent = shadowActivity.getNextStartedActivity();
ShadowIntent shadowIntent = shadowOf(startedIntent);
Intent expectedIntent = new Intent(activity, HomeActivity.class);
assertEquals(shadowIntent, expectedIntent);
}
@Override
public void onTaskError(int requestCode, ServiceResponse error) {
}
}, Constants.API_REQUEST_CODE_LOGIN);
}
有谁能告诉我我做错了什么?
答案 0 :(得分:0)
Mockito.verify()会告诉您相关方法是否已被测试中的应用程序访问,但它不会执行它。
我建议使用Robolectric 中提供的Http处理(此处显示为3.0 + assertj。它也可以在2.4中使用,但具有不同的类名)。排队将在下一次Http调用时传递的Http响应。然后检查是否设置了正确的活动。
@Test
public void afterSplash_shouldStartHomeActivity() {
FakeHttp.addPendingHttpResponse(Constants.API_REQUEST_CODE_LOGIN, someHttpResponse);
Api.get_instance(RuntimeEnvironment.application.getApplicationContext()).login(Constants.API_USER, Constants.API_PASSWORD, this, Constants.API_REQUEST_CODE_LOGIN);
assertThat(ShadowApplication.getInstance().peekNextStartedActivity()).isInstanceOf(HomeActivity.class);
}