【发布时间】:2017-09-16 19:44:57
【问题描述】:
我有以下课程,我正试图弄清楚如何编写单元测试:
@EBean
public class LoginInteractorImpl implements LoginInteractor {
private final static String LOGIN_INTERACTOR_THREAD_ID = "LOGIN_INTERACTOR_WORKER";
private UserRepo mUserRepository;
private Call<ResponseBody> mCall;
@Override
@Background(id = LOGIN_INTERACTOR_THREAD_ID)
public void login(final String username, final String password, final OnLoginFinishedListener listener) {
mUserRepository = RetrofitHelper.createClient(UserRepo.class);
mCall = mUserRepository.doLogin(Credentials.basic(username, password));
mCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
final int code = response.code();
if (code == 200) {
listener.onSuccess(response.headers().get(""));
} else if (code == 401) {
listener.invalidCredentialsFailure();
} else if (code >= 400 && code < 500) {
listener.invalidCredentialsFailure();
} else if (code >= 500 && code < 600) {
listener.noServerResponseFailure();
} else {
APIError error = ErrorUtils.parseError(response);
listener.onError("Unexpected response: code:"
+ error.getStatusCode()
+ "message: " + error.getMessage());
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
if (t instanceof IOException) {
listener.noNetworkFailure();
} else if(call.isCanceled()) {
Log.e(TAG, "request was aborted");
} else {
listener.onError(t.getMessage());
}
}
});
}
@Override
public void cancel() {
mCall.cancel();
BackgroundExecutor.cancelAll(LOGIN_INTERACTOR_THREAD_ID, true);
}
}
使用 Retrofit 我正在调用我的 web 服务来获得身份验证,并且 web 服务应该返回一个 Authtoken 以供以后使用。我只是无法掌握如何测试这个。我尝试使用 Mockito 创建解决方案,但我只是不知道如何测试登录方法的逻辑。有没有 Mockito/Retrofit 方面的专家可以指导我更接近可行的解决方案?
【问题讨论】:
标签: java android unit-testing mockito retrofit2