JUnit 如何管理在测试类中定义的仅运行一次 @BeforeClass

Posted

技术标签:

【中文标题】JUnit 如何管理在测试类中定义的仅运行一次 @BeforeClass【英文标题】:How JUnit manages running @BeforeClass only once which is defined inside the test class 【发布时间】:2013-12-03 07:37:00 【问题描述】:

我非常了解@BeforeClass 是什么。它在 JUnit 测试运行开始之前执行一次,@Before 方法在每个测试用例之前执行。 我的问题是关于一个非常资深的 *** 用户(Péter Török 68.8k) 请参考 [*** 问题] [1]:JUnit: using constructor instead of @Before 大约 2 年前发布,但在 JUnit4 上。所以我认为它仍然有效且真实。

他在这里提到

@Before 等价于测试类的构造函数

JUnit 为每个 @Test 创建一个新的测试类实例,

那么 JUnit 如何管理在测试类中定义的只运行一次 @BeforeClass 呢?

【问题讨论】:

【参考方案1】:

带有@BeforeClass 注释的方法必须是静态的。 JUnit 不需要任何测试类的实例来调用它。

【讨论】:

【参考方案2】:

嗯,jUnit 可以在类加载时运行带有@BeforeClass 注释的方法,这就像您使用静态初始化器自己实现一样。

@BeforeClass@AfterClass 带注释的方法必须是静态的,这也暗示了 jUnit 正在做类似的事情。

【讨论】:

【参考方案3】:

那是因为@BeforeClass 必须是静态方法。一旦它是静态的,JUnit 就知道如何运行它一次。

【讨论】:

【参考方案4】:

有时,多个测试需要共享计算成本高昂的设置(例如登录数据库)。虽然这可能会损害测试的独立性,但有时它是必要的优化。用@BeforeClass 注释public static void no-arg 方法会导致它在类中的任何测试方法之前运行一次。超类的@BeforeClass 方法将在当前类之前运行。静态方法不属于类的实例。这些是类的属性。

【讨论】:

以上是关于JUnit 如何管理在测试类中定义的仅运行一次 @BeforeClass的主要内容,如果未能解决你的问题,请参考以下文章

在 JUnit 5 中,如何在所有测试之前运行代码

如何一次运行我所有的内部类junit测试

maven项目中junit测试同一方法, 运行一次却重复执行了两次?

在JUnit测试类中使用类中的常量

Junit测试类中如何调用Http通信

如何在用 Kotlin 编写的 JUnit 5 测试类中注入 Spring bean?