6

我想编写一个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的方法。有什么办法可以做到这一点?提前致谢!

4

1 回答 1

17

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

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

于 2013-01-02T14:38:28.637 回答