Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定制调用TestSuite的多个TestExecutionListeners方法的最佳方式是什么?_Java_Spring_Junit_Spring Test - Fatal编程技术网

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

Java 定制调用TestSuite的多个TestExecutionListeners方法的最佳方式是什么?,java,spring,junit,spring-test,Java,Spring,Junit,Spring Test,为了优化目的,我需要自定义调用逻辑的TestExecutionListeners 在我的例子中,我有一个ApplicationContext和两种类型的测试: 使用WebDriver(我们称之为observatedest) 使用RestTemplate和JdbcTemplate(我们称之为ApiTest) 每种类型都使用自己的TestExecutionListener: observeTest-observeTestListener ApiTest-ApiTestListener observe

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

在我的例子中,我有一个
ApplicationContext
和两种类型的测试:

  • 使用
    WebDriver
    (我们称之为
    observatedest
  • 使用
    RestTemplate
    JdbcTemplate
    (我们称之为
    ApiTest
  • 每种类型都使用自己的
    TestExecutionListener

  • observeTest
    -
    observeTestListener
  • ApiTest
    -
    ApiTestListener
  • observeTestListener
    ApiTestListener
    extend
    TestListener
    都定义了
    prepareTestInstance()

    observeTestListener
    实现了
    beforeTestClass()
    beforeTestClass()
    方法以及
    ApiTestListener
    的功能

    我需要以一种
    junittestsuite
    的方式将上述测试类型组合在一起:

  • 对于每个测试,调用
    prepareTestInstance()
  • 一旦第一个
    observetest
    即将实例化,就会执行
    observetestlistener
    beforeTestClass()
  • 与ApiTest相同
  • 当当前套件中最后一个
    observeTest
    完成时,调用
    observeTestListener
    posterTestClass()
  • 与ApiTest相同
  • 事情变得更加复杂,因为每个测试可能在一个套件和不同的
    ApplicationContexts
    中运行(由于不同的配置文件使用)

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

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

  • 实现定制的
    Runner
    (我甚至不相信这是可能的)
  • 以某种方式通知
    TestContextManager
    ,应调用或不应调用特定方法(
    beforeTestClass()
    beforeTestClass()
    )。我觉得
    @BootstrapWith
    custom
    SpringClassRule
    应该对我有所帮助

  • 谢谢

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

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

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

    问候,


    Sam(SpringTestContext框架的作者)

    为什么不能在两种不同的测试类型上使用
    @TestExecutionListeners
    来注册合适的监听器?@M.Deinum这正是我正在做的,但是当我将这些测试放在套件中时,TestExecutionListeners会在该套件的每个测试中调用它的方法。我试图避免Spring的SuiteExecution Listener可能会起作用。