0

我正在写这样的测试

public String cc = "";

@Test
public void testSendMailWithMissingData() throws MessagingException {

    String sender = "test@test.com";
    String receiver = "test2@test.com";
    String subject = "";
    String content = "";

    javaMailSenderImpl.setPort(greenMail.getSmtp().getPort());
    iMailService.sendMail(sender, receiver, subject, content, cc);

    MimeMessage[] emails = greenMail.getReceivedMessages();
    assertEquals(subject, emails[0].getSubject());
    ......
    }

@Test
public void testSendMailWIthData() throws MessagingException {

    String sender = "test@test.com";
    String receiver = "receiver@receiver.com";
    String subject = "test_subject";
    String content = "test_content";
    cc = "ccaddress@cc.com";

    javaMailSenderImpl.setPort(greenMail.getSmtp().getPort());
    iMailService.sendMail(sender, receiver, subject, content, cc);

    MimeMessage[] emails2 = greenMail.getReceivedMessages();
    assertEquals(cc, InternetAddress.toString(emails2[0].getRecipients(Message.RecipientType.CC)));

     }

但我知道testSendMailWIthData预期的 cc is ccaddress@cc.combut is null。为什么?是因为我使用相同的端口吗?为什么我不能在两个不同的字符串中使用两个不同的字符串值@Test

帮助

JUNIT日志:

java.lang.AssertionError: expected:<ccaddress@cc.com> but was:<null>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:743)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:144)
    ...
4

2 回答 2

2

您可以在testSendMailWIthData()中检索每封电子邮件的所有字段emails2[]吗?

我认为您在第二次测试中也收到了第一次测试发送的电子邮件。在第一个测试中,您发送了一封带有 CC 的电子邮件null/absent。这可能是您获得空值的原因。

我建议您打印所有电子邮件字段sender, receiver, subject, content, and cc以确认这一点。如果是这种情况,为避免该问题,要么在每个测试中使用不同的服务器/端口,要么先断言识别正确的电子邮件(例如通过发件人并在每次测试中保持发件人电子邮件地址不同),然后断言其余字段。

另一种选择可能是 - 首先删除来自特定发件人的所有电子邮件 ( test@test.com) 作为每个测试中的前置步骤 ( @Before),然后继续发送、检索和断言。

于 2019-07-30T15:18:44.113 回答
1

在你的

assertEquals(cc, InternetAddress.toString(emails2[0].getRecipients(Message.RecipientType.CC)));

抄送是“ccaddress@cc.com”

JUnit 日志告诉你关于这个 assertEquals 的事情。查看方法签名:

public static void assertEquals(double expected, double actual)

您可以使用以下方法对其进行测试:

assertEquals("ccaddress@cc.com", cc)
于 2019-07-30T15:07:58.760 回答