[英]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。
@RunWith(PowerMockRunner.class)
@PrepareForTest(YourClass.class)
在這里,您可以使用 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.