代码之家  ›  专栏  ›  技术社区  ›  JTeam

在kotlintest中如何在每次上课前和上课前写作

  •  1
  • JTeam  · 技术社区  · 8 年前

    给出的示例来自 kotlin-test github docs ,但我在这里看不到beforeach或beforeclass的概念。我想明白,

    • 如何在每次测试前执行一次代码/方法
    • 如何在每个测试类之前执行一次代码/方法
    class MyTests : StringSpec({
      "length should return size of string" {
        "hello".length shouldBe 5
      }
      "startsWith should test for a prefix" {
        "world" should startWith("wor")
      }
    })
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   sksamuel    8 年前

    与您自己的答案@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)
        }
      }
    }
    
        2
  •  1
  •   JTeam    8 年前

    在对github文档和kotlin测试框架源代码做了一些研究之后,下面是编写beforetest、beforespec、after test、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")
        }
    }
    

    这看起来不优雅,如果有什么方法可以使它优雅,请张贴它。

    推荐文章