JUnit 的每一个@Test
声明的测试中,会将非static变量或者非单例隔离开。
举个例子:
import org.junit.Test;
class TestBean {
public int num = 1;
}
public class JUnitDemo {
private TestBean testBean = new TestBean();
@Test
public void test01() {
System.out.println("test01");
System.out.println(testBean.num); // 输出1
// 将 num 修改为 10
testBean.num = 10;
System.out.println(testBean.num); // 输出10
}
@Test
public void test02() {
System.out.println("test02");
System.out.println(testBean.num); // 还是输出1,可见没有受到 test01 的影响
// 将 num 修改为 100
testBean.num = 100;
System.out.println(testBean.num); // 输出 100
}
}
运行 JUnitDemo中所有测试,输出如下:
test01
1
10
test02
1
100
test01先运行,会将 testBean.num 修改为 10。然后 test02 运行,但是开始时 testBean.num 的值仍是 1,可见没有受到 test01 的影响。
为什么会出现这种隔离的效果?因为运行 test01 和 test02 时,JUnitDemo 对象不是同一个。也就是 JUnit 为每一次测试生成一个新对象。这个很容易验证:
import org.junit.Test;
public class JUnitDemo {
@Test
public void test01() {
System.out.println(this);
}
@Test
public void test02() {
System.out.println(this);
}
}
运行所有测试,输出:
JUnitDemo@3d82c5f3
JUnitDemo@66cd51c3
输出结果不同,所以两次this也不是同一个。