【发布时间】:2015-12-09 05:12:18
【问题描述】:
在编写JUnit测试时,我想知道以下之间是否有任何技术差异:
选项 1:
定义一个 setup 方法,即用 @Before 注释,在运行任何 @Test 方法之前初始化测试夹具状态。
选项 2:
定义一个私有方法 - 只是一个没有任何注释的普通旧私有方法 - 执行相同的初始化,并使每个 @Test 方法的第一行调用此方法。 (忽略有人忘记在每次测试中调用该方法的可能性。我正在寻找技术差异,而不是人为因素)
选项 2 示例:
public class MyTest {
private void runSetupLogic() {
// whatever @Before method would have done
}
@Test
public void testMethod1() {
runSetupLogic();
// test logic
}
@Test
public void testMethod2() {
runSetupLogic();
// test logic
}
}
【问题讨论】:
-
你为什么不看the doc?
-
主要区别在于@Before 是自动的,不依赖于测试方法作者。很难理解你为什么不利用它。
-
谢谢,阿法辛。我想这就是您要指出的:“超类的 @Before 方法将在当前类的方法之前运行。”
-
@EJP:这个优势当然存在,但我想知道是否存在任何技术差异。我之所以问,是因为我刚刚阅读了一个关于使用
@BeforeClass或在测试类构造函数中进行一次性初始化的区别的问题。有区别,答案解释了这一点。所以我想检查一下@Before的特别之处