簡體   English   中英

PowerMock,模擬一個靜態方法,然后在所有其他靜態上調用真正的方法

[英]PowerMock, mock a static method, THEN call real methods on all other statics

我正在設置模擬類的靜態方法。 我必須在@Before JUnit 設置方法中執行此操作。

我的目標是設置類來調用真正的方法,除了我明確模擬的那些方法。

基本上:

@Before
public void setupStaticUtil() {
  PowerMockito.mockStatic(StaticUtilClass.class);

  // mock out certain methods...
  when(StaticUtilClass.someStaticMethod(anyString())).thenReturn(5); 

  // Now have all OTHER methods call the real implementation???  How do I do this?
}

StaticUtilClass的問題是,在StaticUtilClass ,如果提供null值,方法public static int someStaticMethod(String s)不幸地拋出RuntimeException

所以我不能簡單地走調用真實方法作為默認答案的明顯路線,如下所示:

@Before
public void setupStaticUtil() {
  PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods

  // The below call to someStaticMethod() will throw a RuntimeException, as the arg is null!
  // Even though I don't actually want to call the method, I just want to setup a mock result
  when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5); 
}

我對我感興趣的模擬方法的結果進行模擬后,我需要設置默認答案以在所有其他靜態方法上調用真實方法。

這可能嗎?

你在找什么叫做部分嘲笑

在 PowerMock 中,您可以使用mockStaticPartial方法。

在 PowerMockito 中,您可以使用存根,它只會存根定義的方法而其他保持不變:

PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);

也不要忘記

@PrepareForTest(StaticUtilClass.class)

雖然我遲到了,但是我們可以通過顯式指定來實現部分模擬並覆蓋模擬對象的默認行為。

下面的例子展示了如果行為沒有明確定義,我們如何讓PowerMockito調用真正的方法:

例如PowerMockito.mockStatic(MyClass.class, new CallsRealMethods());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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