java - @Before、@BeforeClass、@BeforeEach 和 @BeforeAll 之间的区别

标签 java junit annotations junit4 junit5

两者的主要区别是什么

  • @Before@BeforeClass
    • 在 JUnit 5 中 @BeforeEach@BeforeAll
  • @After@AfterClass

根据JUnit Api @Before 用于以下情况:

When writing tests, it is common to find that several tests need similar objects created before they can run.

@BeforeClass 可用于建立数据库连接。但是 @Before 不能做同样的事情吗?

最佳答案

标记为 @Before 的代码在每次测试之前执行,而 @BeforeClass 在整个测试夹具之前运行一次。如果你的测试类有十个测试,@Before代码会被执行十次,而@BeforeClass只会被执行一次。

一般来说,当多个测试需要共享同一个计算量大的设置代码时,您可以使用 @BeforeClass。建立数据库连接属于这一类。您可以将代码从 @BeforeClass 移动到 @Before,但您的测试运行可能需要更长时间。请注意,标记为 @BeforeClass 的代码作为静态初始化程序运行,因此它将在创建测试夹具的类实例之前运行。

JUnit 5 ,标签 @BeforeEach@BeforeAll 是 JUnit 4 中 @Before@BeforeClass 的等价物。它们的名称更能表明它们何时运行,松散地解释为:“在每个测试之前”和“在所有测试之前”。

关于java - @Before、@BeforeClass、@BeforeEach 和 @BeforeAll 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20295578/

相关文章:

java - 使用 Guice 将字符串注入(inject)类进行 JUnit 测试

java - 如何仅在运行junit时从项目类路径中删除依赖项?

eclipse - 在 Eclipse JUnit View 中显示 Jenkins 测试结果

Java 格式详细的日期差异

java - 实例变量的执行顺序

java - 我想知道是否可以创建一个强制执行特定返回类型的 Java 注释?

java - 即使将 Swagger 添加为 Maven 依赖项,也无法导入 @ApiParam 或 @ApiModelProperty 注释

java - 两个@RequestMapping注解的区别

java - Hibernate/JPA @PoSTLoad 注释是否标记对象 "dirty"?

java - 在 IntelliJ IDEA 的导入 block 中自动导入