簡體   English   中英

使用嘲笑在另一個方法中模擬一個方法。 基本上想模擬methodA來測試statusMethod

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM