JUnit 单测隔离


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也不是同一个。



(本文完)


Java JUnit 测试框架教程