JUnit 引用相同的 var 值

JUnit refers to same var value

我正在写这样的测试

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 是 ccaddress@cc.com 但是 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)
    ...

在你的

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

cc 是 "ccaddress@cc.com"

JUnit 日志为您介绍了这个 assertEquals。查看方法签名:

public static void assertEquals(double expected, double actual)

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

assertEquals("ccaddress@cc.com", cc)

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

我想您在第二次测试中也收到了第一次测试发送的电子邮件。在第一个测试中,您发送了一封抄送 null/absent 的电子邮件。这可能是你变得空的原因。

我建议您打印所有电子邮件字段,例如 sender, receiver, subject, content, and cc 以确认这一点。如果是这种情况,为避免此问题,请在每个测试中使用不同的 server/port 或同时断言首先识别正确的电子邮件(例如,发件人并在每个测试中保持发件人电子邮件地址不同),然后断言其余字段。

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