我正在向表格提交的用户发送电子邮件。我在测试时遇到问题。我正在测试sendConfirmationEmailForSubmission
,并提交表单。但是在测试表单提交时,它每次都会发送邮件。我有很多组合来测试表单提交。我正在通过在提交测试时发送电子邮件来浪费我的电子邮件配额,因为我正在分别测试sendEmail功能。任何人都可以帮助我。
SubmitAction
提交表单并发送电子邮件。发送电子邮件submitAction
来电sendConfirmationEmailForSubmission()
。
public void sendConfirmationEmailForSubmission(String userId)
throws EntityDoesNotExistException {
Assumption.assertFalse(ERROR_NULL_PARAMETER, userId == null );
EmailsLogic.sendConfirmationEmailForSubmission(userId);
}
我认为不是使用上面的函数我应该像这样使用它并在测试表单submssion时传递userId = null?
public void sendConfirmationEmailForSubmission(String userId)
throws EntityDoesNotExistException {
if (userId != null ) {
EmailsLogic.sendConfirmationEmailForSubmission(userId);
}
}
答案 0 :(得分:0)
您发送电子邮件(EmailsLogic.sendConfirmationEmailForSubmission
)的方法似乎是静态的。
您可以使用PowerMock之类的库来模拟电子邮件服务。在模拟方法中,您只需打印“已发送电子邮件”,而无需实际发送电子邮件并测试其余代码。
这是一篇关于使用PowerMock测试静态方法的好文章: https://blog.codecentric.de/en/2011/11/testing-and-mocking-of-static-methods-in-java/
答案 1 :(得分:0)
不应该在Java中滥用静态方法。 为了满足您的需求,我建议您利用OOP:多态性。 这将使您的设计更灵活,更可测试。
因此,您可以在实例方法中更改静态方法EmailsLogic.sendConfirmationEmailForSubmission
。
然后,您可以使用EmailsLogic类层次结构的对象,而不是依赖静态方法。
您可以创建两个EmailsLogic实现。 EmailsLogic
发送了真正的邮件,另一个类StubbedEmailsLogic
扩展了EmailsLogic
类,但通过不发送邮件来覆盖电子邮件发送方法sendConfirmationEmailForSubmission()
。
现在,在您的测试中,使用StubbedEmailsLogic实例,通过将此实例提供给SubmitAction类来伪造邮件发送。
重要提示:您的操作类应该期望基类型EmailsLogic
,以便能够切换到一个或其他实现。