问题描述
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)
- PowerMockito.verifyStatic(VerificationModeFactory.times(2)); Postman.send(type,message.getText());
在这里,您可以使用Mockito的ArgumentCaptor
在像这样的静态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"));
}
}