我使用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())
),我看到相同的主题值四次(即最后一次方法调用的主题值)。
我记得以前使用过它并且正常工作。我使用Spring,javaMailSender是单例的,在上下文XML中定义了模拟对象。
<bean id="mockedJavaMailSender" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="org.springframework.mail.javamail.JavaMailSender"/>
</bean>
创建MimeMessage:
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, false, "utf-8");
helper.setSubject(emailSendingTask.getSubject());
helper.setFrom(Constants.MAIL_FROM);
有什么想法吗?
MimeMessage
实例是如何产生的?是通过new
操作符还是通过像when(someMock.createObject()).thenReturn(<MimeMessage instance>)
这样的模拟对象? - undefinedstatic
的类变量中。你的测试只是在展示失败... - undefined