JUnit3 TestSuite应该真的像这样使用吗?

时间:2012-09-08 17:12:42

标签: java junit junit3

我无法回想起如何使用JUnit3 TestSuite并在谷歌搜索后发现了这个

public class MyTestsuite extends TestSuite {
    public static Test suite() {
        final TestSuite s = new TestSuite();
        s.addTestSuite(Test1.class);
        s.addTestSuite(Test2.class);
        return s;
    }
}

它似乎有用,但对我来说看起来很奇怪:

  • 为什么要在合适的班级中创建新实例?
  • 怎么会有人发现这个?在javadoc中,没有什么比“编写一个名为 suite 静态方法”。
  • 为什么不能像这样简单:

public class MyTestsuite extends AbstractTestSuite {
    @Override
    public void suite() {
        add(Test1.class);
        add(Test2.class);
    }
}

基本上,我很好奇,如果在我的第一个例子中这样做真的是要走的路。此外,我想知道这样的界面背后可能有哪些设计决定。


这也有效,可能有点不那么奇怪:

public class MyTestsuite extends TestSuite {
    MyTestsuite() {
        super(Test1.class, Test2.class);
    }
    public static Test suite() {
        return new TestSuite();
    }
}

2 个答案:

答案 0 :(得分:3)

如果您想构建测试套件并按类引用它们,则使用第一个示例。

您的第二个示例不遵循JUnit 3模式来定义套件,如JUnit 3 cookbook中所述,讨论了static suite使用的TestRunner方法的用法。

TestRunner课程也discusses its use in its Javadocs

  

如果此类[a Test class]定义静态suite方法,则将调用它并返回测试。

答案 1 :(得分:1)

在第一个示例中,最好返回套件子类MyTestsuite,而不是junit.framework.TestSuite,这样在IDE中单击套件时看到该类而不是{{ 1}}

junit.framework.TestSuite

由于返回的套件为空,您的第三个示例不起作用,此处一个必须返回套件子类。另请注意,正在使用的构造函数仅存在于Junit public class MyTestsuite extends TestSuite { public static Test suite() { final MyTestsuite s = new MyTestsuite(); s.addTestSuite(Test1.class); s.addTestSuite(Test2.class); return s; } }

3.8.2