[英]Why are JUnit5 Parametrized tests using argument providers not defined in @ArgumentSource?
I have a problem with my parameterized tests.我的参数化测试有问题。
@ParameterizedTest
@ArgumentsSource(CorrectMessagesArgumentProvider.class)
void shouldSendMessageForCorrectConfiguration(SmtpConfiguration configuration) {
var expectedMessageBody = fetchMessage();
var alertSender = new AlertSender(configuration);
var alertSubject = subjectFrom();
alertSender.send(expectedMessageBody, alertSubject);
var receivedMessages = greenMail.getReceivedMessages();
assertEquals(1, receivedMessages.length);
}
@ParameterizedTest
@ArgumentsSource(IncorrectMessagesArgumentProvider.class)
void shouldNotSendMessageForIncorrectConfiguration(SmtpConfiguration smtpConfiguration) {
var expectedMessageBody = fetchMessage();
var alertSender = new AlertSender(smtpConfiguration);
var alertSubject = subjectFrom();
var expectedErrorMessage = "Error sending alert";
var actualErrorMessage =
assertThrows(
SendAlertException.class, () -> alertSender.send(expectedMessageBody, alertSubject));
assertTrue(actualErrorMessage.getMessage().contains(expectedErrorMessage));
}
When I run those tests separetly, they work correctly.当我单独运行这些测试时,它们可以正常工作。 But when I run suite, the second test running fails, because it is using arguments from the other test.
但是当我运行套件时,第二个测试运行失败,因为它正在使用另一个测试中的 arguments。 They're somehow sharing that resource, but I have no idea how.
他们以某种方式共享该资源,但我不知道如何共享。 Any ideas?
有任何想法吗?
Okey, I got it - deep in the class responsible for sending emails, I was creating session object by getDefaultInstance()
.好的,我明白了 - 在负责发送电子邮件的 class 深处,我正在通过
getDefaultInstance()
创建 session object。 It was creating singleton which was available for all JVM processes.它正在创建 singleton,它可用于所有 JVM 进程。 When I used
getInstance()
- it work like a charm.当我使用
getInstance()
- 它就像一个魅力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.