Я пишу тест с использованием Mockito.Мой класс выглядит так:
@RunWith(MockitoJUnitRunner.class)
public class MailContainsAttachmentJsonFilterTest {
private MailContainsAttachmentJsonFilter mailContainsAttachmentJsonFilter;
private JavaMailSender javaMailSender;
@Before
public void setUp() throws Exception {
mailContainsAttachmentJsonFilter = new MailContainsAttachmentJsonFilter();
javaMailSender = new JavaMailSenderImpl();
}
И тест:
@Test
public void filterTest01() throws MessagingException, IOException {
MimeMessage mimeMessage = Mockito.mock(MimeMessage.class);
Folder folder = Mockito.mock(Folder.class);
Mockito.when(folder.isOpen()).thenReturn(true);
Mockito.when(mimeMessage.getFolder()).thenReturn(folder);
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.addAttachment("test.json", new ByteArrayDataSource("{}", "application/json"));
Mockito.when(mimeMessage).thenReturn(messageHelper.getMimeMessage());
mailContainsAttachmentJsonFilter.filter(mimeMessage);
}
Когда я запускаю тест, как только я достигаю Mockito.when(folderisOpen()).thenReturn(true)
, я получаю:
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not
supported.
2. inside when() you don't call method on mock but on some other
object.
MimeMessage
и Folder
оба от javax.mail
.
Насколько я могу судить, ни один из методов, которые я пытаюсь смоделировать, не является final / private / equals ()/hashcode().