2014-11-18 1 views
0

Я пытаюсь проверить, имеет ли объект, который я создал в моем методе тестирования и фактическом объекте, одинаковые значения во всех полях. Я использовал Matchers.refEq(), чтобы проверить это. В моем коде фактические ссылки на два объекта проверяются, а не значения полей, в отличие от того, что говорит документация для Matchers.refEq().Matchers.refEq() в JUnit сравнивает ссылки объектов

Что не так с нижестоящим чеком?

@Test 
public void sendEmailMsgTest() throws MessagingException{ 

    PowerMockito.mockStatic(Transport.class); 
    PowerMockito.doNothing().when(Transport.class); 
    Transport.send(Matchers.any(MimeMessage.class)); 

    Properties systemProperties = System.getProperties(); 
    Session session = Session.getDefaultInstance(systemProperties); 
    session.setDebug(debug); 
    MimeMessage mimeMessage = new MimeMessage(session); 
    mimeMessage.setFrom(new InternetAddress(sendFrom)); 
    mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(
      validEmailAddress)); 
    mimeMessage.setSubject("HTML/CSS grade report"); 
    mimeMessage.setSentDate(new Date()); 
    final BodyPart textBodyPart = new MimeBodyPart(); 
    textBodyPart 
      .setText("Here is your score card for the HTML/CSS assessment"); 
    final BodyPart fileBodyPart = new MimeBodyPart(); 
    final DataSource source = new FileDataSource(outputFile); 
    fileBodyPart.setDataHandler(new DataHandler(source)); 
    fileBodyPart.setFileName(new File(outputFile).getName()); 
    final Multipart multipart = new MimeMultipart(); 
    multipart.addBodyPart(textBodyPart); 
    multipart.addBodyPart(fileBodyPart); 
    mimeMessage.setContent(multipart); 

    WriteGradeReportUtil.emailGrade(validEmailAddress, outputFile); 
    Mockito.verify(Transport.class); 
    Transport.send(Matchers.refEq(mimeMessage)); 
} 

Метод Я пытаюсь тест:

static void emailGrade(){ 
//Some code 
MimeMessage message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(sendFrom)); 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress(
        sendTo)); 
      message.setSubject("HTML/CSS grade report"); 
      message.setSentDate(new Date()); 
      final BodyPart textBodyPart = new MimeBodyPart(); 
      textBodyPart 
        .setText("Here is your score card for the HTML/CSS assessment"); 
      final BodyPart fileBodyPart = new MimeBodyPart(); 
      final DataSource source = new FileDataSource(outputFile); 
      fileBodyPart.setDataHandler(new DataHandler(source)); 
      fileBodyPart.setFileName(new File(outputFile).getName()); 
      final Multipart multipart = new MimeMultipart(); 
      multipart.addBodyPart(textBodyPart); 
      multipart.addBodyPart(fileBodyPart); 
      message.setContent(multipart); 
      Transport.send(message); 
} 

ответ

2

Mockito 1.x использует внутренне в Hamcrest Искателя и внутренне сличитель использует Apache Commons org.mockito.internal.matchers.apachecommons.EqualsBuilder#reflectionEquals(java.lang.Object, java.lang.Object, java.lang.String[]). Mockito 2.x напрямую использует ресурсы Apache org.mockito.internal.matchers.apachecommons.EqualsBuilder#reflectionEquals(java.lang.Object, java.lang.Object, java.lang.String[])

Так что если этот вызов говорит, что объекты не равны, возможно, одно из ваших полей просто не равно.

Также обратите внимание, что Mockito javadoc предупреждает вас: <b>Warning</b> The equality check is shallow! Возможно, эти поля не реализуют equals, поэтому они не могут быть равны.


OUtside the scope of this answer Я хотел бы сделать замечание по фрагменту кода. Трудно понять, а затем реорганизовать. Один из девизов издевательства - , чтобы не издеваться над типами, которыми вы не являетесь.. Вместо этого вы должны использовать макет почтового сервера - там много, и отправьте почту прямо там.

Смежные вопросы