Java SpringJUnit4ClassRunner:使用不同的输入数据多次运行测试方法

Java SpringJUnit4ClassRunner:使用不同的输入数据多次运行测试方法,java,spring,spring-mvc,junit,junit4,Java,Spring,Spring Mvc,Junit,Junit4,我正在为Spring应用程序开发测试。我有几个测试,我想为不同的数据运行多次 我不能使用JUnit的@Parameters,因为测试类必须与Parameterized.class一起运行才能使其正常工作,而我必须与设置模拟Spring上下文的SpringJUnit4ClassRunner.class一起运行测试类。 不幸的是,似乎是这样。我还看了TestContextBootstrapper和TextExecutionListener,但它似乎也帮不了我 是否有一种方法可以针对不同的输入数据多次

我正在为Spring应用程序开发测试。我有几个测试,我想为不同的数据运行多次

我不能使用JUnit的@Parameters,因为测试类必须与Parameterized.class一起运行才能使其正常工作,而我必须与设置模拟Spring上下文的SpringJUnit4ClassRunner.class一起运行测试类。 不幸的是,似乎是这样。我还看了TestContextBootstrapper和TextExecutionListener,但它似乎也帮不了我

是否有一种方法可以针对不同的输入数据多次运行Spring应用程序的测试

我需要类似TestNG的
@Test(dataProvider=)@dataProvider
耦合或
@Factory(dataProvider=)@dataProvider
耦合的东西


提前感谢。

如果您可以依赖JUnit 4.12,您可以将
参数化
@UseParametersRunnerFactory一起使用

首先,创建一个实现
ParameterizedRunneFactory
的类,返回要运行测试的
运行程序的实例:

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 {
}

有关详细信息,请参阅。

找到了一个更简单的解决方案


将发布哪些解决方案对我有效。

因此我需要使用
参数化的
运行程序运行我的测试类,使用
@UseParametersRunnerFactory
指定工厂,此工厂必须返回SpringJUnit4Runner的子类(通过接受
TestWithParameters
的构造函数扩展)和
getParameters()
TestWithParameters的方法必须返回将传递给我的测试类的构造函数的参数列表?