Java JUnit使用@Before over@BeforeClass

Java JUnit使用@Before over@BeforeClass,java,junit,Java,Junit,据此,@Before注释在每个测试之前执行一次,而@BeforeClass注释在所有测试之前只执行一次 我的直觉告诉我总是在课前使用@,所以问题是,为什么还要在课前使用@?是否存在@Before注释比@BeforeClass注释性能更好/更快的情况?每个测试都应该隔离。通过使用BeforeClass,前一个测试的状态可能会被挂起,并扰乱后面的测试 通常使用BeforeClass设置昂贵的外部资源,然后使用BeforeClass重置外部资源或本地资源 最后一点注意: 性能更好/更快 在这种情况下,

据此,@Before注释在每个测试之前执行一次,而@BeforeClass注释在所有测试之前只执行一次


我的直觉告诉我总是在课前使用@,所以问题是,为什么还要在课前使用@?是否存在@Before注释比@BeforeClass注释性能更好/更快的情况?

每个测试都应该隔离。通过使用BeforeClass,前一个测试的状态可能会被挂起,并扰乱后面的测试

通常使用BeforeClass设置昂贵的外部资源,然后使用BeforeClass重置外部资源或本地资源

最后一点注意:

性能更好/更快

在这种情况下,我会说这两个属性应该在这里单独处理,这是更好的=更快。只要运行完整测试套件的总时间不超过10分钟,那么更快就不重要了


一旦你超过这个神奇的十分钟,在这一点上,你肯定会谈论集成测试而不是单元测试,然后开始寻找使事情更快的方法

每个测试都应隔离。通过使用BeforeClass,前一个测试的状态可能会被挂起,并扰乱后面的测试

通常使用BeforeClass设置昂贵的外部资源,然后使用BeforeClass重置外部资源或本地资源

最后一点注意:

性能更好/更快

在这种情况下,我会说这两个属性应该在这里单独处理,这是更好的=更快。只要运行完整测试套件的总时间不超过10分钟,那么更快就不重要了

一旦你超过这个神奇的十分钟,在这一点上,你肯定会谈论集成测试而不是单元测试,然后开始寻找使事情更快的方法

当您使用@BeforeClass时,它建议您在所有测试之前进行初始化。因此,一个测试可能依赖于另一个测试,例如,如果测试改变了字段的状态,那么我会鼓励使用@Before,或者更好地在方法本身内部为测试方法做准备。 很少有测试需要完全相同的初始状态的情况,那么为什么要将它们结合在一起呢?

当您使用@BeforeClass时,它建议您在所有测试之前进行初始化。因此,一个测试可能依赖于另一个测试,例如,如果测试改变了字段的状态,那么我会鼓励使用@Before,或者更好地在方法本身内部为测试方法做准备。
很少有测试需要完全相同的初始状态的情况,那么为什么要将它们结合在一起呢?

我给你举个例子:

假设您需要验证web应用程序中的表单。你要用硒来做这个

您的测试类将有10个测试。您无需在每次启动测试套件时打开和关闭webdriver浏览器。在这种情况下,您可以使用@BeforeClass方法初始化webdrive浏览器

但是,对于每个验证测试,您都需要重置表单。此操作将在@Before方法上执行


这是一个非常简单的例子,但可能会让事情更清楚。

我给你举个例子:

假设您需要验证web应用程序中的表单。你要用硒来做这个

您的测试类将有10个测试。您无需在每次启动测试套件时打开和关闭webdriver浏览器。在这种情况下,您可以使用@BeforeClass方法初始化webdrive浏览器

但是,对于每个验证测试,您都需要重置表单。此操作将在@Before方法上执行


这是一个非常简单的例子,但可能会让事情更清楚。

表现更好吗?为什么要将性能引入junit测试?@Before用于在每次测试之前重置上下文…对于我的特定情况,我当前使用@Before和assumeflse来排除某些测试。因此,我想这并不是一个真正的性能问题,更重要的是,如果我不需要重新检查冗余条件,我应该使用@BeforeClass。你能提供一个例子说明你的意思吗?@在public void exclude{assumefulescondition;}之前,为了免除测试,你可以使用@Ignore,no?Perform better?为什么要将性能引入junit测试?@Before用于在每次测试之前重置上下文…对于我的特定情况,我当前使用@Before和assumeflse来排除某些测试。因此,我想这并不是一个真正的性能问题,更重要的是,如果我不需要重新检查冗余条件,我应该使用@BeforeClass.you能提供一个例子来说明这是什么意思吗?@在public void exclude{assumefulsecondition;}之前,为了免除一个测试,您可以使用@Ignore,no?