如何在kotlintest中编写beforeach和beforeClass

如何在kotlintest中编写beforeach和beforeClass,kotlin,kotlintest,Kotlin,Kotlintest,这里给出的是来自的示例,但我没有看到beforeach或beforeClass的概念。我想了解 如何在每次测试前执行一次代码/方法 如何在每个测试类之前执行一次代码/方法 在对github文档和kotlin测试框架源代码进行了一些研究之后,下面是编写beforeTest、beforeSpec、PostTest和afterSpec的代码 class MyTest : StringSpec({ "test should run " { "Hello".shouldHav

这里给出的是来自的示例,但我没有看到beforeach或beforeClass的概念。我想了解

  • 如何在每次测试前执行一次代码/方法
  • 如何在每个测试类之前执行一次代码/方法

在对github文档和kotlin测试框架源代码进行了一些研究之后,下面是编写beforeTest、beforeSpec、PostTest和afterSpec的代码

class MyTest : StringSpec({

    "test should run " {
        "Hello".shouldHaveLength(4)
    }

    "test2 should run " {
        "Hello World".shouldHaveLength(10)
    }
}) {
    override fun beforeTest(description: Description) {
        super.beforeTest(description)
        println("Before every spec/test case")
    }

    override fun beforeSpec(description: Description, spec: Spec) {
        super.beforeSpec(description, this)
        println("Before every test suite")
    }

    override fun afterTest(description: Description, result: TestResult) {
        super.afterTest(description, result)
        println("After every spec/test case")
    }

    override fun afterSpec(description: Description, spec: Spec) {
        super.afterSpec(description, spec)
        println("After every test suite")
    }
}

这看起来并不优雅,如果有任何方法可以让它变得优雅,请发布它。

与您自己的答案@JTeam非常相似,但是使用init{}构造函数块来声明您的测试,然后您可以直接在类中重写方法

class MyTest : StringSpec() {

  override fun beforeTest(description: Description) {
    super.beforeTest(description)
    println("Before every spec/test case")
  }

  override fun beforeSpec(description: Description, spec: Spec) {
    super.beforeSpec(description, this)
    println("Before every test suite")
  }

  override fun afterTest(description: Description, result: TestResult) {
    super.afterTest(description, result)
    println("After every spec/test case")
  }

  override fun afterSpec(description: Description, spec: Spec) {
    super.afterSpec(description, spec)
    println("After every test suite")
  }

  init {
    "test should run " {
      "Hello".shouldHaveLength(4)
    }

    "test2 should run " {
      "Hello World".shouldHaveLength(10)
    }
  }
}
class MyTest : StringSpec() {

  override fun beforeTest(description: Description) {
    super.beforeTest(description)
    println("Before every spec/test case")
  }

  override fun beforeSpec(description: Description, spec: Spec) {
    super.beforeSpec(description, this)
    println("Before every test suite")
  }

  override fun afterTest(description: Description, result: TestResult) {
    super.afterTest(description, result)
    println("After every spec/test case")
  }

  override fun afterSpec(description: Description, spec: Spec) {
    super.afterSpec(description, spec)
    println("After every test suite")
  }

  init {
    "test should run " {
      "Hello".shouldHaveLength(4)
    }

    "test2 should run " {
      "Hello World".shouldHaveLength(10)
    }
  }
}