2

我不记得如何使用 JUnit3TestSuite并且在谷歌搜索后发现了这个

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中没有像“编写一个名为套件的静态方法”这样的东西。
  • 为什么不像这样简单:

 

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();
    }
}
4

2 回答 2

3

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

您的第二个示例不遵循用于定义套件的 JUnit 3 模式,正如JUnit 3 食谱中讨论的那样,讨论static suiteTestRunner.

TestRunner课程还讨论了它在其 Javadocs 中的使用

如果这个类 [a Testclass] 定义了一个静态suite方法,它将被调用并运行返回的测试。

于 2012-09-08T17:28:22.503 回答
1

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

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

您的第三个示例不起作用,因为返回的套件是空的,这里必须返回套件子类。作为旁注,使用中的构造函数仅存在于 Junit3.8.2

public class MyTestsuite extends TestSuite {
    MyTestsuite() {
        super(new Class[]{Test1.class, Test2.class});
    }
    public static Test suite() {
        return new MyTestsuite();
    }
}
于 2017-10-27T09:49:05.940 回答