I'm trying to test a snippet of my code that uses retrofit, so I've created an interface to "mock" the return, it works in parts, it can invoke the onresponse of enqueue, however it can not convert Response <AuthResponse> response
, follows the error:
java.lang.ClassCastException: okhttp3.ResponseBody$1 cannot be cast to br.com.safety.safetyrecognitionsdk.data.network.auth.AuthResponse
interface to mock
public interface AuthRepositoryBoundary {
Call<AuthResponse> auth(String appKey, String projectId);
}
Class mocked
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);
}
}
implementation
@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());
}
});
}
The test:
@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));
}
Aucun commentaire:
Enregistrer un commentaire