【问题标题】:Using Multiple when and then block in the code how to handle error在代码中使用 Multiple when 然后 block 如何处理错误
【发布时间】:2025-11-27 03:15:02
【问题描述】:

我正在使用 geb,spock 使用 groovy,我正在为功能中的多个块使用功能。但是一个块失败而不是立即退出循环。 例如:-

 def "test"(){
    given:
        println(" checking 3 nos")

    when:
         def a = 5
         def b = 10
         def c = 20
          if (a < b)
            println("Hi, I'm Pass")
    then:
        true

    when:
         def a1 = 5
         def a2 = 10
         def a3 = 20
          if (a2 > a3)
            println("Fail")
    then:
    false

    when:
        def a11 = 5
        def a22 = 10
        def a33 = 20
          if (a33 > a11)
            println("Hello, i'm pass")
    then:
    true

但这里它只重新运行嗨,我通过但不执行第三块,不返回第二块答案。请指导我。

【问题讨论】:

  • 你能解释清楚吗? then: truethen: false 应该做什么?
  • 第二个然后块执行 false 并且测试失败,这是预期的行为。您的预期结果是什么?
  • Tim_yates, given, when and then 是语法。给定的是特征,什么时候是流,然后是返回类型。如果第二个块失败,则它不会继续第三个块。那么如何通过第二个运行第三个块失败。
  • 正如 Jon 在他的回答中提到的,您可以为第三个块创建单独的测试。如果第三块不依赖于第一块和第二块,那可能会更有意义。

标签: groovy spock


【解决方案1】:

如果您要问如何在前一个失败的时候/之后继续运行,那么答案是您不能。单一测试方法将在第一次失败时停止。如果您想要单独的测试,请创建多个方法。

def 'test1'() {
    when:
    ...

    then:
    ...
}

def 'test2'() {
    when:
    ...

    then:
    ...
}

【讨论】:

    【解决方案2】:

    这是不可能的。将您的代码拆分为多个测试,并在每个测试中使用 when/then 阻塞。

    您还可以将一些设置代码移至setupSpec()setup()

    【讨论】: