简体   繁体   English

为什么 JUnit5 参数化测试使用未在 @ArgumentSource 中定义的参数提供程序?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM