在测试类构造函数上使用@Before的优点和缺点?

时间:2015-05-05 16:37:48

标签: java junit

问题:在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注释的设置方法。

0 个答案:

没有答案