根据此answer,@Before
注释在每次测试之前执行一次,而@BeforeClass
注释仅在之前执行一次测试。
我的直觉告诉我要始终使用@BeforeClass
,所以问题是,为什么要使用@Before
?是否存在@Before
注释比@BeforeClass
注释执行得更好/更快的情况?
答案 0 :(得分:3)
每个测试都应该是隔离的。通过使用BeforeClass
,之前测试的状态可能会悬而未决,并且会破坏后面的测试。
一个人通常使用BeforeClass
来设置昂贵的外部资源,Before
来重置世界(无论是外部资源还是本地资源)。
最后一点说明:
表现更好/更快
在这种情况下,我会说这两个属性应该在这里独立处理(更好!=更快)。只要运行完整测试套件的总时间不到10分钟,那么"更快"根本不重要。
一旦你超过那个神奇的十分钟(此时你肯定会谈论集成测试而不是单元测试)然后开始寻找制作事物的方法"更快"。
答案 1 :(得分:3)
我会举个例子:
假设您需要在Web应用程序中验证表单。你将使用Selenium。
您的测试类将进行10次测试。每次启动测试套件时,都无需打开和关闭webdriver浏览器。在这种情况下,您可以使用@BeforeClass
方法来暂停webdrive浏览器。
但是,对于每个验证测试,您需要重置表单。您将使用@Before
方法执行此操作。
这是一个非常简单的例子,但可能会让事情更清楚。
答案 2 :(得分:1)
当您使用@BeforeClass
时,它建议您在所有测试之前进行初始化。所以一个测试可能依赖于另一个测试(例如,如果测试改变了字段的状态),所以我鼓励使用@Before
,甚至更好地为方法本身内的测试方法做准备。
当你的测试需要完全相同的初始状态时,很少有这种情况,为什么要将它们结合在一起?