1

代码

我有以下三个测试:

import io.kotest.core.spec.style.BehaviorSpec
import io.kotest.matchers.shouldBe

class Example {
    fun blah(number: Int): Int {
        if (number == 1) {
            throw IllegalArgumentException()
        } else {
            return number
        }
    }
}

class ExampleTest : BehaviorSpec({
    Given("example") {
        val example = Example()
        When("calling blah(0)") {
            val result = example.blah(0)
            Then("it returns 0") {
                result shouldBe 0
            }
        }
        When("calling blah(1)") {
            val result = example.blah(1)
            Then("it returns 1") {
                result shouldBe 1
            }
        }
        When("calling blah(2)") {
            val result = example.blah(2)
            Then("it returns 2") {
                result shouldBe 2
            }
        }
    }

})

问题

中间测试抛出了一个意外的异常。我希望看到 3 个测试运行,其中 1 个失败,但 IntelliJ 和 Kotest 插件向我展示的是 2 个测试中有 2 个通过了。我可以在“测试结果”侧面板中看到有些地方不对劲,但它没有任何有用的信息。

如果我导航到index.html测试结果,我可以正确看到所有内容。我想在 IntelliJ 中看到相同的数据。

截图

IntelliJ 输出: 智能输出 请注意:

  • 在左侧,缺少数字 1 的测试
  • 在顶部它说“测试通过:2 of 2”
  • 左边有黄色的叉到“Given”,但“Given”中的所有测试都是绿色的

index.html与测试结果: 测试结果为 html

其他信息

  • Kotest 版本:4.6.3
  • IntelliJ Kotest 插件版本:1.1.49-IC-2021.2.3

IntelliJ Kotest 插件

4

2 回答 2

0

Given如果在or块内抛出异常When,则测试初始化​​失败。如果我只运行一个测试,这是输出:

失败的测试

似乎只在Then块内处理异常。

这意味着所有可以抛出异常的东西都应该放入Then块中,这反过来意味着设置和操作不能在测试之间共享:

class ExampleTest : BehaviorSpec({
    Given("example") {
        When("calling blah(0)") {
            Then("it returns 0") {
                val example = Example()
                val result = example.blah(0)
                result shouldBe 0
            }
        }
    }
    
    Given("example") {
        When("calling blah(1)") {
            Then("it returns 1") {
                val example = Example()
                val result = example.blah(1)
                result shouldBe 1
            }
        }
    }

    Given("example") {
        When("calling blah(2)") {
            Then("it returns 2") {
                val example = Example()
                val result = example.blah(2)
                result shouldBe 2
            }
        }
    }

})

这也会导致 2 级冗余缩进。

例如,上述代码的替代方法是使用不同的kotest 测试风格ShouldSpec

于 2022-01-06T10:34:38.793 回答
0

此问题已在5.1.0.

于 2022-02-22T16:31:23.653 回答