问题描述
我有一个名为“ EmailService.java”的类名称。
public class EmailService {
public static void send(String emailFrom,List<String> emailTo,String subject,String message) {
MessageBuilder builder = Email.createMessageBuilder();
builder.addFrom(emailFrom);
builder.addTo(emailTo);
builder.addSubject(subject);
builder.addMessage(message);
//builder.build() returns MimeMessage object
Email.send(builder.build());
}
}
我需要模拟上面的“ Email.send(builder.build());”线。所以,我的测试类如下...
@RunWith(powermockrunner.class)
@PrepareForTest({EmailService.class,Email.class,MimeMessage.class,MessageBuilder.class})
public class EmailServiceTest {
private EmailService emailService;
private Mimemessage message;
private MessageBuilder builder;
@Test
public void testSend() throws Exception {
mockStatic(Email.class);
mockStatic(MimeMessage.class);
message = Mockito.mock(MimeMessage.class);
builder = Mockito.spy(MessageBuilder.class);
//Some line of code to prepare other mock data
Mockito.when(builder.build()).thenReturn(message);
powermockito.donothing().doThrow(EmailException.class).when(Email.class);
Email.send(message);
}
}
如果我尝试使用上述方法来应用模拟变量来模拟带有参数的静态void方法,那么我将面临以下运行时异常。
org.mockito.exceptions.missusing.UnfinishedStubbingException:在此处检测到未完成的存根:-> powermockito.donothing()。doThrow(EmailException.class).when(Email.class); 例如。 thenReturn()可能会丢失。
但是, 如果我尝试使用类似如下方法的静态void方法模拟其他参数,则如下所示。
powermockito.donothing().doThrow(EmailException.class).when(Email.class,"send",Mockito.any(MimeMessage.class));
然后我得到如下的编译时错误。
Stubber类型中的when(T)方法不适用于 参数(Class
,String,Mockito.any(MimeMessage.class))
如何用参数模拟静态void方法?
我正在使用以下版本的jar进行模拟。
- powermock-module-junit4:1.7.4
- powermock-api-mockito2:1.7.4
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)