9

我们有很多使用 JUnit 3编写的集成测试,尽管我们现在使用4.4运行它们。其中一些需要在类中的所有测试完成后运行的 tearDown 方法(以释放一些公共资源)。

我看到这可以在junit 4中使用@AfterClass(org.junit)完成。但是,将其混合到现有的扩展 TestCase (junit.framework.*) 的 junit 3 测试中似乎不起作用。[顺便说一句,有迁移工具吗?问题264680表明一年前没有。]

我已经看到提到使用 junit.extensions.TestSetup 来处理这种事情。我对此的简短测试似乎不起作用。有什么例子吗?

4

2 回答 2

20

找到了我自己的问题的答案 :) 在发布我的问题之前我曾简单地尝试过这个,但它对我不起作用。但我现在意识到这是因为我们的测试框架调用 junit 的方式与默认不同,所以它没有调用以下解决方案中所需的“套件”方法。在 Eclipse 中,如果我使用捆绑的 junit runner 直接执行一个 Test/TestCase,它运行良好。

在 junit 3 中每个类执行一次此设置/拆卸的一种方法是使用 TestSuite。这是 junit.org 上的一个示例:

有没有办法让 setUp() 只运行一次?

public static Test suite() {
    return new TestSetup(new TestSuite(YourTestClass.class)) {

        protected void setUp() throws Exception {
            System.out.println(" Global setUp ");
        }
        protected void tearDown() throws Exception {
            System.out.println(" Global tearDown ");
        }
    };
}
于 2009-10-30T17:36:59.680 回答
2

在 JUnit 4 中,您的测试类不需要扩展TestCase. 相反,您必须确保测试类的名称匹配*Test并且每个测试方法都使用@Test. 您是否尝试过进行这些更改,然后将@AfterClass注释添加到相关方法?

有一些注释可以替换您当前可能正在使用的大多数/所有功能TestCase

于 2009-10-29T21:24:05.650 回答