为了重构测试,我们被告知JUnit每次都会通过执行以下操作来创建该类的新实例:
public class someClassTest{
final private someClass obj1 = new someClass();
@Test
public void t1() {
Assertions.assertEquals(1, obj1.returnOne());
}
@Test
public void t2() {
Assertions.assertEquals(8, obj1.return(2));
}
}
而不是使用类似的
@BeforeEach
void setup(){
someClass obj1 = new someClass();}
或每次在测试方法中对其进行初始化。
我的问题是,为什么我的第一段代码如何以及如何实现与@BeforeEach相同的目的?
答案 0 :(得分:2)
JUnit框架对此进行管理。它在每次测试之前创建测试类(someClassTest
)的新实例。
看看这个例子:
public class SampleTest {
@Test
public void test1() {
System.out.println(this.toString());
}
@Test
public void test2() {
System.out.println(this.toString());
}
}
运行它,您会发现测试类实例在test1
和test2
中有所不同,例如:
SampleTest@4e515669
SampleTest@504bae78
从那时起,这只是Java的普通行为。 如果对象中有字段,则将重新创建(并重新初始化):
public class SampleTest {
private int i = 0;
@Test
public void test1() {
// i is 0, so lets increase and see what happens in test2
i++;
}
@Test
public void test2() {
// here i is again 0 because it was re-created, we have a different object of SampleTest
}
}