[英]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.