[英]Mocking a method inside another method using mockito. Basically want to mock methodA for testing statusMethod
我正在尝试使用Mockito模拟一个getStatusCode。 但我无法使用模拟嘲笑getStatusCode
public class Client {
private ApiClient adminApiClient;
private UserApi listuserApi;
public Client(String Url) {
this.adminApiClient = new ApiClient().setBasePath(Url + "/admin/");
this.listuserApi = new UserApi(this.adminApiClient);
}
public String getUser() {
String errorMessage = null;
try {
ApiResponse<User> response =
listuserApi.listVpcUsersWithHttpInfo("string");
if (response.getStatusCode() != 200) {
errorMessage = "Agent returned response code " +
response.getStatusCode();
}
} catch (Exception ex) {
errorMessage = "error"
}
return errorMessage;
}
我已经尝试过这种方法:
url = "www.google.com";
Client client = new Client(url);
Client client1 = Mockito.spy(client);
ApiClient adminApiClient = new ApiClient().setBasePath(url + "/zsaadmin/");
UserApi listuserApi = new UserApi(adminApiClient);
UserApi listuserApi1 = Mockito.spy(listuserApi);
ApiResponse<User> response = Mockito.mock(ApiResponse.class);
Mockito.when(listuserApi1.listVpcUsersWithHttpInfo("string")).thenReturn(response);
//Mocking line
Mockito.when(response.getStatusCode()).thenReturn(200);
String errorMessage = client1.getUserApi();
//Since response.getStatusCode is 200, the errorMeassage should be null
assertEquals(null,errorMessage);
但是不会返回200,这意味着不执行模拟行。 errorMessage仍然取决于传递的url。 但它应返回null,因为响应代码被模拟为200
有人可以告诉我我在哪里做错了吗?
这是因为您尚未将模拟程序设置为client1
的实例。 因为这更像是类Client
设计问题,所以必须使用反射将模拟设置为该私有变量。 您可以在调用client1.getUserApi()
之前在嘲笑中使用FieldSetter设置该值。
FieldSetter.setField(client1,
client1.getClass().getDeclaredField("listuserApi"), listuserApi1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.