在JUnit中使用@RunWith有解决方法吗?

时间:2014-04-03 09:00:11

标签: java spring unit-testing junit

我有一个主测试类(A)和另一个(B)从它延伸。

A有一个@RunWith(SpringJUnit4ClassRunner.class)注释来初始化它。 我需要在B上使用@RunWith(JUnitParamsRunner.class)注释。

但似乎我无法做到这两点。有没有一种方法可以在没有@RunWith注释的情况下参数化测试套件?

另一种解决方案是使用

testContextManager = new TestContextManager(AbstractInvoiceCreationModuleTest.class);
testContextManager.prepareTestInstance(this);

但我不能在@BeforeClass方法中写这个,因为它是静态的,不允许使用它。我不希望在@Before方法中编写上面的代码,因为类将在每个测试方法之前初始化。许多测试类都来自A。

可以做些什么?

3 个答案:

答案 0 :(得分:2)

Spring在版本4.2中添加了对基于@Rule的Spring上下文支持的支持。

http://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/integration-testing.html#testcontext-junit4-rules

该文档的示例:

// Optionally specify a non-Spring Runner via @RunWith(...)
@ContextConfiguration
public class IntegrationTest {

   @ClassRule
   public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();

   @Rule
   public final SpringMethodRule springMethodRule = new SpringMethodRule();

   @Test
   public void testMethod() {
      // execute test logic...
   }
}

答案 1 :(得分:1)

您可以使用规则代替SpringJUnit4ClassRunner.classhttp://www.alexecollins.com/tutorial-junit-rule/

答案 2 :(得分:0)

我不知道具体的情况(春季测试跑步者),但我有一个类似的情况,最终创建了自己的跑步者。