![](/img/trans.png)
[英]How to pass dynamic stream arguments in a method in parametrized tests (Junit5)
[英]Why are JUnit5 Parametrized tests using argument providers not defined in @ArgumentSource?
我的參數化測試有問題。
@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));
}
當我單獨運行這些測試時,它們可以正常工作。 但是當我運行套件時,第二個測試運行失敗,因為它正在使用另一個測試中的 arguments。 他們以某種方式共享該資源,但我不知道如何共享。 有任何想法嗎?
好的,我明白了 - 在負責發送電子郵件的 class 深處,我正在通過getDefaultInstance()
創建 session object。 它正在創建 singleton,它可用於所有 JVM 進程。 當我使用getInstance()
- 它就像一個魅力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.