使用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中文網其他相關文章!