TestSuite有没有类似Spring TestExecutionListener的东西?

时间:2016-06-23 08:10:21

标签: java spring junit testcontext

目前我正在使用TestExecutionListener进行测试,而且效果很好

public class ExecutionManager extends AbstractTestExecutionListener {

    @Override
    public void beforeTestClass(TestContext testContext) throws Exception {
        System.out.println("beforeClass");
    }

    @Override
    public void afterTestClass(TestContext testContext) throws Exception {
        System.out.println("afterClass");
    }
}

测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(ExecutionManager.class)
public final class TC_001 {

    @Test
    public void test() {
        System.out.println("Test_001");
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(ExecutionManager.class)
public final class TC_002 {

    @Test
    public void test() {
        System.out.println("Test_002");
    }
}

当我在测试套件中包含这些测试时,会为每个测试类执行beforeTestClass(TestContext testContext)afterTestClass(TestContext testContext)方法,这是非常符合逻辑的:

@RunWith(Suite.class)
@Suite.SuiteClasses({
        TC_001.class,
        TC_002.class
})
public final class TS_001 {
}

是否有SuiteExecutionListener(套房TestExecutionListener)?

基本上我需要套件

的非静态@BeforeClass@AfterClass

在ExecutionListener中,我需要找出已启动的类:case或suite。为此,我可以:

  • 分析StackTrace并获得调用类
  • 使用Reflection.getCallerClass(int i)(已弃用)
  • 将来电者课程传递给ExecutionManager(顺便说一句,我怎么能这样做?是否可以像Object一样将TestContext加入Bundle?)< / LI>

但我并不喜欢这些解决方案。 SuiteExecutionListener更为可取

谢谢

1 个答案:

答案 0 :(得分:1)

不,遗憾的是, Spring TestContext Framework (TCF)中没有SuiteExecutionListener这样的东西。

TCF没有在套件级别与JUnit 4集成。

如果您想在TestContext中存储某些内容,那不是问题。 TestContext实施org.springframework.core.AttributeAccessor,因此您可以将属性存储在TestContext中。但请注意,给定TestContext的生命周期与测试类绑定。