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

时间:2015-01-26 08:41:39

标签: java junit

在我的课堂上,我有以下公共方法:

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

只是委托工作到另一个方法(私有)。

我如何为此编写单元测试?

2 个答案:

答案 0 :(得分:1)

当您编写测试时,方法是仅委托给另一个(私有)方法还是包含自己的代码并不重要。

良好的单元测试可验证被测单元是否符合其合同。 sendEmail的客户既不知道也不关心工作的主要内容是以私人或公共方式进行的。

({1}}版本的public版本)sendEmail应该?这就是你的单元测试应该检查的内容。提示是&#34;将其参数转发给私有方法&#34;不是一个正确的答案:)

答案 1 :(得分:0)

结果我写了以下代码:

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