定制为TestSuite调用的多个TestExecutionListeners方法的最佳方法是什么?
为了优化目的,我需要定制TestExecutionListeners
调用逻辑定制为TestSuite调用的多个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
ObservableTestListener
被调用当最后ObservableTest
当前套件完成 - 与
ApiTest
东西同样得到了更加复杂,因为每个测试可以在一间套房,并以不同的ApplicationContexts
(由于不同的配置文件使用)
运行我将是任何暗示非常感谢和挖掘方向来实现这样的逻辑正确
我有两个想法而已:
- 实现自定义
Runner
(我不自信,甚至有可能) - 通知
TestContextManager
莫名其妙的特定方法(beforeTestClass()
或afterTestClass()
)应该或不应该被调用。我有一种感觉,@BootstrapWith
SpringClassRule
应该帮助我在
谢谢!
Spring TestContext Framework中的TestExecutionListener
API在套件级别没有任何生命周期回调。
因此,开箱即用,无法指示Spring在套件之前或之后调用TEL上的方法。因此,您提出的支持您需求的解决方案必须完全自定义。
我没有预见到自定义SpringClassRule
会如何有用:您仍然需要一些可靠的机制来确定测试套件何时开始和结束。这实际上是JUnit 4中套件支持通过特定的Runner
以来最大的挑战。因此,如果您通过JUnit 4 Suite
运行所有测试,则可能会在Suite
的自定义子类中构建自己的生命周期回调。
问候,
山姆(Spring的TestContext框架的作者)
为什么是不是可以使用'@ TestExecutionListeners'在2种不同的测试类型,以注册相应的听众? –
@ M.Deinum这正是我正在做的,但是当我将这些测试放入套件中时,TestExecutionListeners将在此套件的每个测试中调用它的方法。我试图避免这种情况 – Anton
Spring的SuiteExecutionListener可能会工作。 http://stackoverflow.com/questions/37985717/is-there-anything-like-spring-testexecutionlistener-for-testsuite –