簡體   English   中英

使用PowerMock返回無效的模擬靜態方法不起作用

[英]Mocking static method that returns void with PowerMock does not work

我嘗試了所有有關類似問題的答案,但無法使其正常工作(例如This

我有這個課(簡體)

public class ItemParametersParser
{ ...
  public static void writeToFile(Item i,  Context c, Builder b) throws HandlerException
}

我正在嘗試模擬writeToFile方法,但沒有成功

@RunWith(PowerMockRunner.class)
@PrepareForTest({ItemParametersParser.class})
public class MyTest {

    @Test
    public void test() throws ... {        
        mockStatic(ItemParametersParser.class);
        doNothing().when(ItemParametersParser.class);
        ItemParametersParser.writeXMLToFile(null,null,null);
        ...
    }

轉到我嘗試過的原始方法的結果還使用以下方法模擬了特定方法:

doNothing().when(ItemParametersParser.writeXMLToFile(any(Item.class),any(Context.class),any(Builder.class)));

但是我在doNothing.when(...

Stubber類型中的when(T)方法不適用於參數(void)

如果我使用PowerMokito.doNothing()。when(...

PowerMockitoStubber類型的when(Class)方法不適用於參數(void)

使用doAnswer也不起作用

編輯:修復導入問題后,如@pvpkiran所述,它現在可以工作! 我可以使用doAnswer進行驗證。

doAnswer(new Answer<Void>() {
    public Void answer(InvocationOnMock invocation) {
      Object[] args = invocation.getArguments();
      System.out.println("called with arguments: " + Arrays.toString(args));
          return null;
    }
}).when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));

您的when方法應該在對象上:

ItemParametersParser itemParametersParser= mock(ItemParametersParser.class);    
doNothing().when(itemParametersParser).writeXMLToFile(any(Item.class),any(Context.class),any(Builder.class));

這應該工作

 @Test
  public void test() throws .... {
    mockStatic(ItemParametersParser.class);
    doNothing().when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));
  }

第一個參數是被測類的類實例,第二個參數是您要模擬的方法名稱,后跟該方法的參數。

確保您導入org.powermock.api.mockito.PowerMockito.doNothing而不是org.mockito.Mockito.doNothing

暫無
暫無

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

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