首頁 > Java > java教程 > 如何使用 PowerMockito 模擬單一靜態方法並傳回物件?

如何使用 PowerMockito 模擬單一靜態方法並傳回物件?

Susan Sarandon
發布: 2024-11-27 16:52:12
原創
645 人瀏覽過

How to Mock a Single Static Method and Return an Object Using PowerMockito?

使用PowerMockito 模擬單一靜態方法並傳回物件

在這種情況下,您的目標是模擬靜態方法m1,來自包含兩個靜態方法m1 和m2 的類別。目標是 m1 在呼叫時傳回一個物件。

為了實現此目標,您最初嘗試使用 PowerMockito.mockStatic 和自訂 Answer 來設定 m1 的回傳值。但是,這種方法會導致類型不匹配錯誤,因為它同時調用了 m1 和 m2,而它們的返回類型不同。

您也嘗試使用 PowerMockito.when 直接指定 m1 的回傳值。然而,當隨後調用 m1 時,這並沒有生效。

正確的策略是使用 1 個參數版本的 mockStatic 來啟用靜態模擬,並使用 when-thenReturn 語法來指定傳回值有針對性的方法。具體方法如下:

import static org.mockito.Mockito.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

class ClassWithStatics {
  public static String getString() {
    return "String";
  }

  public static int getInt() {
    return 1;
  }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatics.class)
public class StubJustOneStatic {
  @Test
  public void test() {
    PowerMockito.mockStatic(ClassWithStatics.class);

    when(ClassWithStatics.getString()).thenReturn("Hello!");

    System.out.println("String: " + ClassWithStatics.getString());
    System.out.println("Int: " + ClassWithStatics.getInt());
  }
}
登入後複製

在此範例中,ClassWithStatics 包含兩個靜態方法:getString 和 getInt。測試類別 StubJustOneStatic 使用 PowerMockito 為 ClassWithStatics 啟用靜態模擬,然後將 getString 的回傳值存根為「Hello!」使用when-thenReturn。 getInt 的預設行為被保留,因此它繼續傳回 1。

以上是如何使用 PowerMockito 模擬單一靜態方法並傳回物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板