问题:在JUnit 4中使用带有@Before
注释的设置方法而不是使用测试类的构造函数是否有优势。如果没有,为什么使用@Before
注释如此常见?
要求的理由:
在JUnit中,标准做法是使用注释为@Before
的方法来初始化跨测试共享的对象:
public class TestFoo {
private TestObject testObject;
@Before
public void setUp() {
//setup testObject
}
@Test
public void testBar() {
assert...("Some assertion", testObject.bar(), ...);
}
}
@Before的行为是在每次测试之前调用它。但是,由于测试类型在每个@Test之前被实例化,这与使用构造函数没有什么不同:
public class TestFoo {
private final TestObject testObject;
public TestFoo() {
//setup testObject
}
@Test
public void testBar() {
assert...("Some assertion", testObject.bar(), ...);
}
}
使用构造函数还有一个好处,就是能够创建TestFoo final
的任何实例变量!
因此,似乎使用测试类的构造函数可能优于使用@Before
注释的设置方法。