为了优化目的,我需要自定义TestExecutionListeners
调用逻辑
就我而言,我有一种ApplicationContext
和两种类型的测试:
- 使用
WebDriver
(我们称之为ObservableTest
)
的 - 使用
RestTemplate
和JdbcTemplate
的 - (我们称其为
ApiTest
)
每种类型都使用自己的TestExecutionListener
:
-
ObservableTest
-ObservableTestListener
-
ApiTest
-ApiTestListener
ObservableTestListener
和ApiTestListener
均扩展了TestListener
,其中定义了prepareTestInstance()
ObservableTestListener
实现beforeTestClass()
和afterTestClass()
方法以及ApiTestListener
我需要在一个JUnit TestSuite
中以上面的结合测试类型以下一个方式:
- 调用每个测试
prepareTestInstance()
- 一旦第一个
ObservableTest
即将实例化,beforeTestClass()
的CC_24就会执行 -
ApiTest
相同 -
ObservableTestListener
的afterTestClass()
在当前套件中完成了上次ObservableTest
时调用 - 与
ApiTest
相同
由于每个测试可以在一个套件和不同的ApplicationContexts
(由于使用不同的使用情况下)进行,因此情况变得更加复杂。
我将非常感谢任何提示和挖掘方向正确实施此类逻辑
到目前为止,我有两个想法:
- 实施自定义
Runner
(我不相信这是可能的) - 通知
TestContextManager
以某种方式应或不应调用特定方法(beforeTestClass()
或afterTestClass()
)。我有一种觉得@BootstrapWith
SpringClassRule
应该帮助我
谢谢!
春季testContext框架中的TestExecutionListener
API在套件级别没有任何生命周期回调。
因此,开箱即用,没有办法指示弹簧在套件之前或之后在Tels上调用Tels的方法。因此,您提出的任何解决方案都必须完全自定义。
我不预见自定义SpringClassRule
如何有用:您仍然需要一些可靠的机制来确定何时开始和结束测试套件。这实际上是自Junit 4中的套件支持以来的最大挑战,是通过特定的Runner
。因此,如果您通过JUNIT 4 Suite
运行所有测试,则可以在Suite
的自定义子类中可能在自己的生命周期回调中构建。
问:
SAM(Spring TestContext框架的作者)