用于junit测试类的多个runwith

时间:2014-11-28 22:47:59

标签: spring junit annotations

有没有人知道如何解决这个问题。

@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(Parametrized.class)

@ContextConfiguration("/META-INF/blah-spring-test.xml")
public class BlahTest
..

所以我希望进行一次弹簧性测试,同时希望对其进行参数化以避免代码重复......

3 个答案:

答案 0 :(得分:4)

您不能使用评论帖中提到的两个参赛者。你应该使用Parameterized runner来使用Spring的TestContextManager来加载Spring上下文。

@Before 
public void before() throws Exception {
  new TestContextManager(getClass()).prepareTestInstance(this);
}

答案 1 :(得分:0)

从Spring Framework 4.2开始,现在可以使用 JUnit规则而不是SpringJUnit4ClassRunner执行基于JUnit的集成测试。这允许基于Spring的集成测试与JUnit的Parameterized或第三方运行程序(如MockitoJUnitRunner)等替代运行程序一起运行。有关spring doc的更多详情。

答案 2 :(得分:0)

使用John B's answer建立在TestContextManager的基础上,还可以调用beforeTestMethod()afterTestMethod()来更好地模拟SpringJUnit4ClassRunner的行为(例如加载数据库) @Sql)。

这些方法需要一个Method参数,因此例如可以利用JUnit4的TestName规则来获取当前测试方法的名称,然后通过反射来获取它。

private static TestContextManager springTestContext
  = new TestContextManager(BlahTest.class);

@Rule
public TestName testName = new TestName();

@Before
public void before() throws Exception {
  springTestContext.prepareTestInstance(this);
  springTestContext.beforeTestMethod(this,
    getClass().getMethod(testName.getMethodName()));
}

@After
public void after() throws Exception {
  springTestContext.afterTestMethod(this,
    getClass().getMethod(testName.getMethodName()), null);
}