我正在尝试测试使用改造的代码片段,因此我创建了一个界面来模拟&#34;模拟&#34;返回,它在部分工作,它可以调用enqueue的响应,但它无法转换Response <AuthResponse> response
,遵循错误:
java.lang.ClassCastException:okhttp3.ResponseBody $ 1无法转换为br.com.safety.safetyrecognitionsdk.data.network.auth.AuthResponse
模拟界面
public interface AuthRepositoryBoundary {
Call<AuthResponse> auth(String appKey, String projectId);
}
类嘲笑
public class AuthSuccessTest implements AuthRepositoryBoundary {
@Override
public Call<AuthResponse> auth(String appKey, String projectId) {
ResponseBody body = ResponseBody.create(
MediaType.parse("application/json"),
MockAuth.AUTH_SUCCESS
);
Response aResponse = Response.success(body, new okhttp3.Response.Builder() //
.code(201)
.message("OK")
.body(body)
.protocol(Protocol.HTTP_1_1)
.request(new Request.Builder().url("http://localhost/").build())
.build());
return Calls.response(aResponse);
}
}
实施
@Override
public void auth(String appKey, String projectID) {
this.authRepository.auth(appKey, projectID).enqueue(new Callback<AuthResponse>() {
@Override
public void onResponse(Call<AuthResponse> call, Response<AuthResponse> response) {
switch (response.code()) {
case 201:
authListener.onSuccess(response.body());
break;
case 401:
authListener.onUnauthorized("Unauthorized");
break;
default:
authListener.onError("Server error");
break;
}
}
@Override
public void onFailure(Call<AuthResponse> call, Throwable t) {
authListener.onError(t.getMessage());
}
});
}
测试:
@Test
public void when_success_authentication_should_be_invoke_on_success() {
this.authListenerMock = mock(AuthListener.class);
this.authRepositoryMock = mock(AuthRepositoryBoundary.class);
this.authSuccessTest = new AuthSuccessTest();
this.safetyRecognition = new SafetyRecognition()
.setCredentials("project_id", "key_id")
.auth(new Authentication(this.authListenerMock, this.authSuccessTest));
verify(this.authListenerMock).onSuccess(ArgumentMatchers.any(AuthResponse.class));
}
答案 0 :(得分:0)
应该是
public interface AuthRepositoryBoundary {
Call<Response<AuthResponse>> auth(String appKey, String projectId);
}
然后:
public class AuthSuccessTest implements AuthRepositoryBoundary {
@Override
public Call<Response<AuthResponse>> auth(String appKey, String projectId) {
ResponseBody body = ResponseBody.create(
MediaType.parse("application/json"),
MockAuth.AUTH_SUCCESS
);
Response aResponse = Response.success(body, new okhttp3.Response.Builder() //
.code(201)
.message("OK")
.body(body)
.protocol(Protocol.HTTP_1_1)
.request(new Request.Builder().url("http://localhost/").build())
.build());
return Calls.response(aResponse);
}}
答案 1 :(得分:0)
此解决方案
@Override
public Call<AuthResponse> auth(String appKey, String projectId) {
ResponseBody body = ResponseBody.create(MediaType.parse("application/json"), JsonMockAuth.AUTH_SUCCESS);
AuthResponse authResponse = new AuthResponse();
authResponse.setxToken("tokinho");
Response<AuthResponse> aResponse = Response.success(authResponse, new okhttp3.Response.Builder()
.code(201)
.message("OK")
.protocol(Protocol.HTTP_1_1)
.request(new Reqest.Builder().url("http://localhost/").build())
.build());
return Calls.response(aResponse);
}