当前位置: 首页 > 知识库问答 >
问题:

如何在一个模块中执行所有junit5测试之前和之后分别编写一次代码?

艾泉
2023-03-14

我有一个多模块项目Spring启动项目,其中每个模块生成一个jar。每个模块都有一个带有junit5测试的src/main/test。有没有办法在特定模块中的src/main/test中的所有测试执行之前和之后运行代码?例如,如果我有2个模块A和B我想要。

  • 在模块A中的所有测试执行之前运行代码
  • 运行所有测试模块A执行的代码
  • 在模块B中的所有测试执行之前运行代码
  • 在模块B中的所有测试执行后运行代码

共有2个答案

楚嘉
2023-03-14

您可以利用继承和注释< code>@BeforeAll,可选地带有一个标记,以便对所有继承的测试类只执行一次。

public class ModuleBaseClass {

  private static boolean started = false;

  @BeforeAll
  public static void beforeAllMethod() {
      if (!started) {
          System.out.println("@BeforeAll static method invoked once.");
          started = true;
      }
      System.out.println("@BeforeAll static method invoked for every class.");
  }
}

public class ModuleFeature1Class extends ModuleBaseClass {

  @Test
  public void testMethod() {
      System.out.println("ModuleFeature1Class: in testMethod().");
  }
}

public class ModuleFeature2Class extends ModuleBaseClass {

  @Test
  public void testMethod() {
      System.out.println("ModuleFeature2Class: in testMethod().");
  }
}

这将打印:

@BeforeAll static method invoked once.
@BeforeAll static method invoked for every class.
ModuleFeature1Class: in testMethod().
@BeforeAll static method invoked for every class.
ModuleFeature2Class: in testMethod().

同样,您可以使用注释@AfterAll在测试后执行。

别兴国
2023-03-14

您可以定义测试类中方法的顺序,但不能定义测试类的顺序。

这个特性有一个开放的请求,但是还没有消息说JUnit是否会实现它:https://github.com/junit-team/junit5/issues/1948

 类似资料:
  • 我们使用maven surefire插件并行运行测试。由配置文件指定。 我希望在surefire并行运行我的测试之前,每次maven的整个执行过程中只能运行一次方法。我怎么能那么做?

  • 我想在测试套件中的每个测试之前和之后运行其他设置和拆卸检查。我看过赛程,但不确定它们是否是正确的方法。我需要在每次测试之前运行设置代码,并且需要在每次测试后运行拆卸检查。 我的用例是检查没有正确清理的代码:它会留下临时文件。在我的设置中,我将检查文件,在拆解中我也会检查文件。如果有额外的文件,我希望测试失败。

  • 问题内容: 我正在编写一个swing应用,当执行某些方法时,我希望有“ wait”光标。我们可以这样: 我想要实现的是一个Java批注,该批注将在方法执行之前设置等待游标,并在执行后将其设置回正常状态。所以前面的例子看起来像这样 我怎样才能做到这一点?也欢迎提出有关解决此问题的其他方法的建议。谢谢! PS-我们在项目中使用Google Guice,但我不知道如何使用它来解决问题。如果有人为我提供类

  • 对于测试证据,我想将我写到特定目录中的所有测试工件(例如服务器调用和响应)存档。我得到了压缩目录的方法,但我没有找到合适的地方来执行它。 测试生命周期回调似乎不是正确的位置,因为@AfterAll在每个测试类之后被调用,但是存档应该在所有测试类中的所有测试终止后生成。 在阅读了诸如如何在模块中执行之前和之后分别编码一次的帖子之后?似乎没有希望在jUnit中执行调用。 我找到了一个扩展TestLau

  • 我有15节6月5日的课要考试。当我从maven运行它们时,afterAll()被执行了15次,这导致了15次对Slack Webhook的通知。还有什么我需要只发送一个通知吗?