MissingMethodInvocationException при вызове публичной нестатической функции для фиктивного объекта - PullRequest
0 голосов
/ 04 декабря 2018

Я пишу тест с использованием 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().

1 Ответ

0 голосов
/ 04 декабря 2018

Вы пропустили вызов метода в этой строке:

Mockito.when(mimeMessage).thenReturn(messageHelper.getMimeMessage());

Таким образом, вы должны изменить «mimeMessage» на «mimeMessage.someMethodCall ()»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...