1

我已经实现了TestListener如下:

object IntegrationTest: TestListener {
    override fun beforeProject() {
        println("integration tests - beforeProject")
    }

    override fun beforeSpec(description: Description, spec: Spec) {
        println("integration tests - beforeSpec")
    }
}

并在测试中使用它:

class SimpleTest: StringSpec() {

    override fun listeners() = listOf(IntegrationTest)

    init {
        "it - 1" {
            println("it - 1")
        }

        "it - 2" {
            println("it - 2")
        }
    }
}

问题是integration tests - beforeProject从未在输出中打印。

结果是:

integration tests - beforeSpec
it - 1
it - 2

我在 intellij 中尝试过并使用 gradle CLI。我错过了什么吗?

4

1 回答 1

1

beforeProject必须在发现任何测试之前运行,否则它实际上不是在项目之前,而是在“执行任何测试之前”(差异在您的使用类中可能并不重要,但 KotlinTest 保持区别)。

因此,在添加到测试类的侦听器中覆盖该方法不会做任何事情(如您所见)。

因此,您需要将侦听器添加到ProjectConfig项目范围的配置中。您可以通过子类化AbstractProjectConfig并将其放在一个特殊的包名中来做到这一点,如下所示:

包 io.kotlintest.provided

object ProjectConfig : AbstractProjectConfig() {
  // add listeners here
}

在此处查看完整文档: https ://github.com/kotlintest/kotlintest/blob/master/doc/reference.md#project-config

于 2018-11-01T22:14:31.027 回答