【发布时间】:2016-12-06 09:44:14
【问题描述】:
出于优化目的,我需要自定义TestExecutionListeners 调用逻辑
就我而言,我有一个ApplicationContext 和两种类型的测试:
- 使用
WebDriver的那些(我们称之为ObservableTest) - 使用
RestTemplate和JdbcTemplate的那些(我们称之为ApiTest)
每种类型都使用自己的TestExecutionListener:
-
ObservableTest-ObservableTestListener -
ApiTest-ApiTestListener
ObservableTestListener 和 ApiTestListener 都扩展了 TestListener,其中定义了 prepareTestInstance()
ObservableTestListener 实现 beforeTestClass() 和 afterTestClass() 方法以及 ApiTestListener 实现
我需要将上面的测试类型组合到一个JUnit TestSuite 中:
- 对于每个测试
prepareTestInstance()被调用 - 一旦第一个
ObservableTest即将被实例化,ObservableTestListener中的beforeTestClass()就会被执行 - 同
ApiTest -
ObservableTestListener的afterTestClass()在当前套件中最后一个ObservableTest完成时调用 - 同
ApiTest
事情变得更加复杂,因为每个测试都可能在一个套件和不同的ApplicationContexts 中运行(由于不同的配置文件使用情况)
我将非常感谢任何提示和挖掘方向以正确实施此类逻辑
目前我有两个想法:
- 实现自定义
Runner(我什至不相信这是否可行) - 以某种方式通知
TestContextManager应该或不应该调用特定方法(beforeTestClass()或afterTestClass())。我觉得自定义@BootstrapWithSpringClassRule应该可以帮助我
谢谢!
【问题讨论】:
-
为什么不能在 2 种不同的测试类型上使用
@TestExecutionListeners来注册合适的监听器? -
@M.Deinum 这正是我正在做的事情,但是当我将这些测试放入套件时,TestExecutionListeners 会在该套件的每个测试中调用它的方法。我试图避免这种情况
-
Spring 的 SuiteExecutionListener 可以工作。 stackoverflow.com/questions/37985717/…
标签: java spring junit spring-test