Junit为每个测试重新初始化类和变量。那么为什么首选在@before带注释的方法中初始化类变量。
答案 0 :(得分:1)
就像你已经说过的,有两种在JUnit 4中实例化测试类字段的常用方法。只要你不使用@TestInstance(Lifecycle.PER_CLASS)
,这对JUnit Jupiter仍然有效。)要么人们初始化它们立即
public class SomeTest {
private final FirstType someFirstType = new FirstType(...);
private final SecondType someSecondType = new SecondType(...);
@Test
public void someTest {
...
}
或他们正在使用设置方法
public class SomeTest {
private FirstType someFirstType;
private SecondType someSecondType;
@Before
public void createObjects() throws Exception {
someFirstType = new FirstType(...);
someSecondType = new SecondType(...);
}
@Test
public void someTest {
...
}
最后,两种样式都会产生相同的结果:每个测试都使用自己的someFirstType
和someSecondType
实例运行。然而,这两种风格都有独特的优势
您可以运行用于计算以后用于调用构造函数的对象的代码。 E.g。
@Before
public void createObjects() throws Exception {
int[] someNumbers = new int[10];
for (int i = 0; i < someNumbers.length; ++i) {
someNumbers[i] = i*i;
}
someFirstType = new FirstType(someNumbers);
}