如何使用SpringJUnit4ClassRunner使用RunNotifier或RunListener

时间:2014-02-05 19:14:53

标签: java spring junit spring-test spring-junit

我想在测试失败时收到通知。理想情况下,我想知道我的@After注释方法是否通过了测试。我知道它们是一个可以用于此目的的RunListener,但它只有在我们使用JunitCore运行测试时才有效。如果测试用例失败或有类似RunListener的东西可以与SpringJUnit4ClassRunner一起使用,有没有办法得到通知?

2 个答案:

答案 0 :(得分:5)

Spring TestContext Framework提供了一个TestExecutionListener SPI,可用于实现此目的。

基本上,如果您实施TestExecutionListener(或更好地扩展AbstractTestExecutionListener),则可以实施afterTestMethod(TestContext)方法。从传递的TestContext开始,您可以访问引发的异常(如果有的话)。

这是org.springframework.test.context.TestContext.getTestException()的Javadoc:

  

获取在执行测试方法期间抛出的异常。

     

注意:这是一个可变属性。

     

返回:抛出的异常,如果没有异常,则返回null   抛出

仅供参考:您可以通过@TestExecutionListeners注释注册您的客户监听器。

此致

萨姆

答案 1 :(得分:0)

另一种选择是JUnits内置TestWatcher规则。

该规则允许您选择要通知的内容。以下是JUnit Github Docs

中的压缩示例
@Test 
public class WatcherTest {

  @Rule
  public final TestRule watcher = new TestWatcher() {

    @Override
    protected void failed(Throwable e, Description) {}

    // More overrides exists for starting, finished, succeeded etc
  };

  @Test
  public void test() {}
}