如何为单行方法编写单元测试(虚拟)



在我的类中,我有以下公共方法:

 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));
}

最新更新