定制为TestSuite调用的多个TestExecutionListeners方法的最佳方法是什么?

问题描述:

为了优化目的,我需要定制TestExecutionListeners调用逻辑定制为TestSuite调用的多个TestExecutionListeners方法的最佳方法是什么?

在我来说,我有一个ApplicationContext和两种类型的测试:它们使用WebDriver

  1. 问鼎(姑且称之为ObservableTest
  2. 问鼎这使用RestTemplateJdbcTemplate(姑且称之为ApiTest

每种类型的用途它自己的TestExecutionListener

  1. ObservableTest - ObservableTestListener
  2. ApiTest - ApiTestListener

两个ObservableTestListenerApiTestListenerTestListener延伸其中prepareTestInstance()定义

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

我需要一个JUnit TestSuite在接下来的方式组合测试类型以上:一旦

  1. 对于每个测试prepareTestInstance()调用
  2. 作为第一ObservableTest即将被实例化的ObservableTestListenerbeforeTestClass()是执行
  3. ApiTest相同
  4. ObservableTestListenerObservableTestListener被调用当最后ObservableTest当前套件完成
  5. ApiTest

东西同样得到了更加复杂,因为每个测试可以在一间套房,并以不同的ApplicationContexts(由于不同的配置文件使用)

运行我将是任何暗示非常感谢和挖掘方向来实现这样的逻辑正确

我有两个想法而已:

  1. 实现自定义Runner(我不自信,甚至有可能)
  2. 通知TestContextManager莫名其妙的特定方法(beforeTestClass()afterTestClass())应该或不应该被调用。我有一种感觉, @BootstrapWith 定制SpringClassRule应该帮助我在

谢谢!

+0

为什么是不是可以使用'@ TestExecutionListeners'在2种不同的测试类型,以注册相应的听众? –

+0

@ M.Deinum这正是我正在做的,但是当我将这些测试放入套件中时,TestExecutionListeners将在此套件的每个测试中调用它的方法。我试图避免这种情况 – Anton

+0

Spring的SuiteExecutionListener可能会工作。 http://*.com/questions/37985717/is-there-anything-like-spring-testexecutionlistener-for-testsuite –

Spring TestContext Framework中的TestExecutionListener API在套件级别没有任何生命周期回调。

因此,开箱即用,无法指示Spring在套件之前或之后调用TEL上的方法。因此,您提出的支持您需求的解决方案必须完全自定义。

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

问候,

山姆(Spring的TestContext框架的作者)