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

How to write unit test for one line method(dummy)?

在我的 class 中,我有以下 public 方法:

 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 的(public 版本)应该做什么?这就是您的单元测试应该检查的内容。提示 "forward its arguments to a private method" 不是正确答案:)

结果我写了下面的代码:

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