在我的类中,我有以下公共方法:
public boolean sendEmail(String[] recepients, String from, String subject, String templateName,
Map<String, Object> params) {
return sendMail(recepients, from, subject, templateName, null, params, null, null);
}
它只是将工作委派给另一种方法(私有)。
如何为此编写单元测试?
编写测试时,方法是否仅委托给另一个(私有)方法或包含自己的代码并不重要。
一个好的单元测试验证被测单元是否履行其合同。sendEmail
的客户既不应该知道,也不应该关心,工作的首当其冲是以私人还是公共方式完成的。
(public
版本)sendEmail
应该做什么?这就是您的单元测试应该检查的内容。提示是"将其参数转发到私有方法"不是一个正确答案:)
结果我写了以下代码:
@Mock
EmailService emailServiceMock;
@Test
public void sendEmailTest() {
String[] recepients = new String[0];
String from = "from";
String subject = "subject";
String templateName = "templateName";
Map<String, Object> params = Collections.emptyMap();
String nullString = null;
Integer nullInteger = null;
when(emailServiceMock.sendEmail(recepients, from, subject, templateName, params)).thenCallRealMethod();
when(emailServiceMock.sendMail(recepients, from, subject, templateName, nullString, params, nullString, nullInteger)).thenReturn(true);
emailServiceMock.sendEmail(recepients, from, subject, templateName, params);
Mockito.verify(emailServiceMock).sendMail(eq(recepients), eq(from), eq(subject), eq(templateName), eq(nullString), eq(params), eq(nullString), eq(nullInteger));
}