簡體   English   中英

為什么 JUnit5 參數化測試使用未在 @ArgumentSource 中定義的參數提供程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM