JUnit基本测试自动setUp

时间:2013-01-02 14:31:36

标签: java unit-testing junit

我想编写一个BaseTest类,它只为所有扩展子类提供“通用setUp()方法”:

public class BaseTest {
    @Before
    public void setUp() {
        System.out.println("setUp() was called!");

        // Doesn't really matter what this is doing...
        EnvironmentConfigurator.configureEnvForTesting();
    }
}

然后:

public class WidgetTest extends BaseTest {
    @Test
    public void test1() {
        fail();
    }

    @Test
    public void test2() {
        fail();
    }
}

理想情况下,每次执行@Test注释的子类方法时,JUnit都会首先调用BaseTest#setUp()方法,该方法执行任何操作(并不重要)。也许它将一些模拟状态重置为一个初始值,这样每个测试都可以从一个“干净的平板”开始,等等。再次,这并不重要。

不幸的是,当我运行此代码时,我只看到setUp() was called!打印到屏幕一次,所以显然BaseTest没有“包裹”我的@Test方法我想要的方式。有没有办法实现这个目标?提前谢谢!

1 个答案:

答案 0 :(得分:16)

我刚刚运行了这个,并调用了两个测试方法,并且两次调用setUp。

如果在派生类中也有@Before带注释的方法,那么您需要将基类设置方法命名为不同的方法,例如: setUpBase()因为如果方法名称相同,则只调用派生类中的@Before带注释的方法,因为它将覆盖基类中的方法。