以非静态方式创建JUnit TestSuite

时间:2011-03-08 09:38:04

标签: java spring junit

我正在寻找一种方法来创建并以非静态方式运行JUnit TestSuite。

目前我正在做这样的事情:

public class MyTestSuite {
    public static TestSuite suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(...);
        suite.addTest(...);
        // ....
        return suite;
    }
}

我这样做是因为我正在创建TestCases,我将以编程方式添加到套件中。 有了这个解决方案,我面临的问题是我的类MyTestSuite从未实例化过。我想用弹簧容器连接它,例如使用

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={...})
@Transactional

但我认为无法告诉SpringJUnit4ClassRunner它还应该执行我的程序化测试。

感谢您的帮助! 埃里克

3 个答案:

答案 0 :(得分:2)

为什么要使用套房?将测试放在他们自己的子目录中并且拥有一个只运行那里的测试的目标(或任何构建工具)似乎更简单。

答案 1 :(得分:1)

您可以尝试将MyTestSuite作为弹簧上下文(测试上下文)的一部分,并在其上触发一个init方法,这将添加您的编程测试。这将允许您注入MyTestSuite,它在Spring实例化时添加了这个程序测试。

希望有所帮助。

答案 2 :(得分:1)

对于JUnit3样式的suite方法,JUnit不会创建该类的实例;它调用方法并在返回的对象上调用run(TestResult)

SpringJUnit4ClassRunner是一个JUnit4 Runner类,因此它不能用于影响JUnit3样式测试套件的行为。 Spring不提供JUnit4风格的套件实现。如果您希望每个测试用例都使用SpringJUnit4ClassRunner,那么最好的选择是将它们升级到JUnit4。

如果您问如何将Spring测试添加到MyTestSuite

public class MyTestSuite {
    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(...);
        suite.addTest(...);
        suite.addTest(new JUnit4TestAdapter(ExampleSpringTest.class));
        // ....
        return suite;
    }
}