簡體   English   中英

如何在 JUnit 中捕獲靜態 void 方法的參數

[英]How to capture parameters of a static void method in JUnit

如何測試我的方法是否使用正確的參數調用了靜態 void 方法?

public void sendMessages(Collection<Message> messages) {
    messages.forEach(message -> {
        String type = calculateType(message);
        Postman.send(type, message.getText());
    });
}

是的,您需要為此使用 PowerMock。

  1. 將這些添加到類級別:
@RunWith(PowerMockRunner.class)
@PrepareForTest(YourClass.class)
  1. PowerMockito.verifyStatic(VerificationModeFactory.times(2)); Postman.send(type, message.getText());

在這里,您可以使用 Mockito 的ArgumentCaptor而不是 type 和 message.getText()

像這樣在靜態 void 方法上使用 PowerMock 的 mockStatic() 和 verifyStatic() 以及 Mockito 的 ArgumentCaptor 來防止調用實際的靜態方法並驗證它是否使用正確的參數調用:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Postman.class)
public class MyTest {

    @Test
    public void testSendMessages() {
        // given
        List<Message> messages = Arrays.asList(new Message("text1"), new Message("text2"));
        PowerMockito.mockStatic(Postman.class);

        // when
        instance.sendMessages(messages);

        // then
        ArgumentCaptor<String> messageTextCaptor = ArgumentCaptor.forClass(String.class);
        PowerMockito.verifyStatic(Mockito.times(2));
        Postman.send(Matchers.any(), messageTextCaptor.capture());
        List<String> capturedMessageTexts = messageTextCaptor.getAllValues();
        assertThat(capturedMessageTexts.get(0), CoreMatchers.equalTo("text1"));
        assertThat(capturedMessageTexts.get(1), CoreMatchers.equalTo("text2"));
    }

}

暫無
暫無

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

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