我正在为Spring应用程序开发测试。我有几个测试,我想多次运行不同的数据。
我无法使用JUnit的@Parameters,因为必须使用Parameterized.class运行测试类才能使其正常工作,而我必须使用设置模拟Spring上下文的SpringJUnit4ClassRunner.class运行测试类。 不幸的是,似乎是this runner doesn't support processing of the @Parameters annotation。我还看了一下TestContextBootstrapper和TextExecutionListener,但看起来它也无法帮助我。
有没有办法针对不同的输入数据多次运行Spring应用程序的测试?
我需要类似于TestNG的@Test(dataProvider=) @DataProvider
夫妻或@Factory(dataProvider = ) @DataProvider
夫妻。
提前致谢。
答案 0 :(得分:4)
如果你可以依赖JUnit 4.12,你可以Parameterized
使用@UseParametersRunnerFactory
首先,创建一个实现ParameterizedRunnerFactory
的类,返回要运行测试的Runner
实例:
public class SpringJUnit4ClassRunnerFactory
implements ParameterizedRunnerFactory {
@Override
public Runner createRunnerForTestWithParameters(final TestWithParameters test)
throws InitializationError {
return new SpringJUnit4ClassRunner(testClass.getJavaClass()) {
@Override
protected Object createTest() throws Exception {
Object[] args = test.getParameters().toArray();
Object testInstance = test.getTestClass().getOnlyConstructor()
.newInstance(args);
// copied from SpringJUnit4ClassRunner.createTest():
getTestContextManager().prepareTestInstance(testInstance);
return testInstance;
}
};
}
}
然后,您可以使用@UseParametersRunnerFactory
注释您的测试类:
@UseParametersRunnerFactory
@RunWith(Parameterized.class)
public class FooTesdt {
}
有关详细信息,请参阅the Parameterized Javadoc。
答案 1 :(得分:-1)
找到了一个更简单的解决方案here。
将发布哪些解决方案对我有用。