【问题标题】:What is the best way for customization of multiple TestExecutionListeners methods invoking for TestSuite?为 TestSuite 调用多个 TestExecutionListeners 方法自定义的最佳方法是什么?
【发布时间】:2016-12-06 09:44:14
【问题描述】:

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

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

  1. 使用WebDriver的那些(我们称之为ObservableTest
  2. 使用RestTemplateJdbcTemplate 的那些(我们称之为ApiTest

每种类型都使用自己的TestExecutionListener

  1. ObservableTest - ObservableTestListener
  2. ApiTest - ApiTestListener

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

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

我需要将上面的测试类型组合到一个JUnit TestSuite 中:

  1. 对于每个测试 prepareTestInstance() 被调用
  2. 一旦第一个ObservableTest 即将被实例化,ObservableTestListener 中的beforeTestClass() 就会被执行
  3. ApiTest
  4. ObservableTestListenerafterTestClass() 在当前套件中最后一个 ObservableTest 完成时调用
  5. ApiTest

事情变得更加复杂,因为每个测试都可能在一个套件和不同的ApplicationContexts 中运行(由于不同的配置文件使用情况)

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

目前我有两个想法:

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

谢谢!

【问题讨论】:

  • 为什么不能在 2 种不同的测试类型上使用 @TestExecutionListeners 来注册合适的监听器?
  • @M.Deinum 这正是我正在做的事情,但是当我将这些测试放入套件时,TestExecutionListeners 会在该套件的每个测试中调用它的方法。我试图避免这种情况
  • Spring 的 SuiteExecutionListener 可以工作。 stackoverflow.com/questions/37985717/…

标签: java spring junit spring-test


【解决方案1】:

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

因此,开箱即用,没有办法指示 Spring 在套件之前或之后调用 TEL 上的方法。因此,您为支持您的要求而提出的任何解决方案都必须完全定制。

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

问候,

Sam(Spring TestContext 框架的作者)

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 2022-07-03
    • 2021-06-09
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多