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
),然后继续发送、检索和断言。
我正在写这样的测试
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
),然后继续发送、检索和断言。