Mockito + 捕获参数 - >多次检索相同的对象



>我使用 Mockito 并使用 ArgumentCaptor 捕获参数,如下所示

ArgumentCaptor<MimeMessage> captorMimeMessages = ArgumentCaptor.forClass(MimeMessage.class);
verify(mockedJavaMailSender, times(4)).send(captorMimeMessages.capture());
assertEquals("blabla", captorMimeMessages.getAllValues().get(0).getSubject());
assertEquals("blabla", captorMimeMessages.getAllValues().get(1).getSubject());
etc.

我调试了它,javaMailSender 被调用了四次不同的对象(和不同的主题值(,但是当我在测试结束时写入 4 个主题值(如 System.out.println(captorMimeMessages.getAllValues().get(X).getSubject())(时,我看到相同的(它是最后一个方法调用的主题(主题值 4 次。

记得我之前用过它,它奏效了。我使用Spring,javaMailSender是单例的,模拟是在上下文XML中定义的,就像

<bean id="mockedJavaMailSender" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="org.springframework.mail.javamail.JavaMailSender"/>
</bean> 

模仿消息创建:

    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, false, "utf-8");
    helper.setSubject(emailSendingTask.getSubject());
    helper.setFrom(Constants.MAIL_FROM);

知道吗?

我的测试类中有以下内容,MimeMessage 只创建了一次,当我在模拟的 javaMailSender 上调用 createMimeMessage(( 时,检索了相同的实例:

when(mockedJavaMailSender.createMimeMessage()).thenReturn(new MimeMessage(session));

相反,我需要以下内容:

when(mockedJavaMailSender.createMimeMessage()).then(new Answer<MimeMessage>() {
    public MimeMessage answer(InvocationOnMock invocation) throws Throwable {
        return new MimeMessage(session);
    }
});

相关内容

  • 没有找到相关文章

最新更新