kotlintest中如何使用beforeProject?

How to use beforeProject in kotlintest?

我实现了一个 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。我错过了什么吗?

beforeProject 必须 运行 在发现任何测试之前,否则它并不是真正在 项目 之前,而是 "before any tests have executed" (区别在您的使用中可能并不重要 class,但 KotlinTest 保留了区别)。

因此,在添加到测试的侦听器中覆盖该方法 class 不会执行任何操作(如您所见)。

因此,您需要将侦听器添加到 ProjectConfig,这是项目范围的配置。您可以通过 subclassing AbstractProjectConfig 并将其放在一个特殊的包名称中来完成此操作,如下所示:

套餐io.kotlintest.provided

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

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