自定义多个testexecutionListeners方法调用测试套件的最佳方法是什么?



为了优化目的,我需要自定义TestExecutionListeners调用逻辑

就我而言,我有一种ApplicationContext和两种类型的测试:

  1. 使用WebDriver(我们称之为ObservableTest
  2. 使用RestTemplateJdbcTemplate
  3. (我们称其为 ApiTest

每种类型都使用自己的TestExecutionListener

  1. ObservableTest -ObservableTestListener
  2. ApiTest -ApiTestListener

ObservableTestListenerApiTestListener均扩展了TestListener,其中定义了prepareTestInstance()

ObservableTestListener实现beforeTestClass()afterTestClass()方法以及ApiTestListener

我需要在一个JUnit TestSuite中以上面的结合测试类型以下一个方式:

  1. 调用每个测试prepareTestInstance()
  2. 一旦第一个ObservableTest即将实例化,beforeTestClass()的CC_24就会执行
  3. ApiTest
  4. 相同
  5. ObservableTestListenerafterTestClass()在当前套件中完成了上次ObservableTest时调用
  6. ApiTest
  7. 相同

由于每个测试可以在一个套件和不同的ApplicationContexts(由于使用不同的使用情况下)进行,因此情况变得更加复杂。

我将非常感谢任何提示和挖掘方向正确实施此类逻辑

到目前为止,我有两个想法:

  1. 实施自定义Runner(我不相信这是可能的)
  2. 通知TestContextManager以某种方式应或不应调用特定方法(beforeTestClass()afterTestClass())。我有一种觉得 @BootstrapWith 自定义SpringClassRule应该帮助我

谢谢!

春季testContext框架中的TestExecutionListener API在套件级别没有任何生命周期回调。

因此,开箱即用,没有办法指示弹簧在套件之前或之后在Tels上调用Tels的方法。因此,您提出的任何解决方案都必须完全自定义。

我不预见自定义SpringClassRule如何有用:您仍然需要一些可靠的机制来确定何时开始和结束测试套件。这实际上是自Junit 4中的套件支持以来的最大挑战,是通过特定的Runner。因此,如果您通过JUNIT 4 Suite运行所有测试,则可以在Suite的自定义子类中可能在自己的生命周期回调中构建。

问:

SAM(Spring TestContext框架的作者)

最新更新