为了优化目的,我需要自定义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()
即将被实例化,ObservableTestListener
的{{1}}即被执行ApiTest
afterTestClass()
时,会调用ObservableTestListener
的{li> ObservableTest
ApiTest
事情变得更复杂,因为每个测试可以在一个套件中运行,并且在不同的ApplicationContexts
中(由于不同的配置文件使用)
我非常感谢正确实施这种逻辑的任何暗示和挖掘方向
到目前为止,我有两个想法:
Runner
(我不相信它甚至可能)TestContextManager
应该或不应该调用特定方法(beforeTestClass()
或afterTestClass()
)。我觉得@BootstrapWith
SpringClassRule
可以帮助我谢谢!
答案 0 :(得分:1)
Spring TestContext Framework中的TestExecutionListener
API在套件级别没有任何生命周期回调。
因此,开箱即用,没有办法指示Spring在套件之前或之后调用TEL上的方法。因此,您提出的任何支持您的要求的解决方案都必须完全自定义。
我没有预见到自定义SpringClassRule
将如何有用:您仍然需要一些可靠的机制来确定测试套件的开始和结束时间。这实际上是最大的挑战,因为JUnit 4中的套件支持是通过特定的Runner
实现的。因此,如果您通过JUnit 4 Suite
运行所有测试,则可以在Suite
的自定义子类中构建自己的生命周期回调。
此致
Sam(Spring TestContext Framework的作者)