Mockito -检查方法调用是否包含某个字符串的字段之一



我正在模拟一个名为EmailSender的类,它有一个方法sendEmail(),该方法接受类Email的参数。我试图验证我的mockEmailSender将调用sendEmail函数一次与预期的电子邮件类,如:verify(mockEmailSender, times(1)).sendEmail(expectedEmail)

class Email {
String title;
List<String> receipients;
String body;
}

我正在初始化预期的电子邮件对象,如下Email expectedEmail = Email.builder().setRecipients(//example list).setTitle("Test title").setBody(// really long text)

然而,有一个警告。我还想添加一系列测试,在这些测试中,我不想验证sendEmail是否使用确切的expectedEmail调用。我希望有一系列测试,其中每个测试只检查body字段中是否存在某个子字符串。例如,如果Body字段是"Test email body",我想要一个测试来验证sendEmail()是用expectedEmail参数调用的,其中Body字段包含子字符串"Test",而不是具体地验证Body字段必须等于"Test email body",同时仍然确保titlereceipient与我设置的完全相等。我如何在Mockito中做到这一点?

您需要使用ArgumentCaptor,如下所示:

ArgumentCaptor<Email> emailCaptor = 
ArgumentCaptor.forClass(Email.class);
verify(classNameObject, times(1)).sendEmail(emailCaptor.capture());
assertThat(emailCaptor.getValue().getBody())....

请记住classNameObject是包含sendEmail方法的类的实例。有了这个,你现在可以在Email body属性中断言任何你想要的东西。

相关内容

最新更新