Spock数据表仅接受Speck输入中的整数

问题描述 投票:0回答:1

我正在将大型应用程序从Grails 3.3迁移到Grails 4。

我们遇到的与Spock有关的问题,我们在Grails 3.39中使用的功能似乎丢失了:当使用数据表来表示规格时,输入的列似乎正在接受jus整数值] >

在下面的代码中,仅斑点的第一行正在传递文本。没有接下​​来的两个,因为spock正在转换为整数,因为将其传递给Math.round(value)

import spock.lang.*

@Unroll
 void 'test to demostrate Spock is just accepting integer in datatable column value'() {
   expect:
       Math.round(value) == result   
   where:
   value     | result
   1234      | 1234
   4321.56d  | 4322d
   1111.56f  | 1112d
 }

我不是在Grails的3.3版中遇到此问题。

提前感谢您参加此问题

Juan

更新:

更新:

描述的行为变化,实际上是在基于数据表的测试之前进行的包括抛出异常的测试的情况下发生>

周围工作:

将包含异常抛出的测试移动到最后一个测试。

我正在将一个大型应用程序从Grails 3.3迁移到Grails4。在我们遇到的与Spock有关的问题上,似乎缺少了在Grails 3.39中使用的功能:使用... ...]] >

Grails 4使用org.spockframework:spock-core:1.2-groovy-2.5

,在此版本中,它按预期工作(与其他Spock版本一样)。

以这种方式更新您的规范:

import spock.lang.Specification
import spock.lang.Unroll

class RoundSpec extends Specification {
    @Unroll
    void 'Math.round(#value) == #result'() {
        setup:
        println "$value as ${value.class}"

        expect:
        Math.round(value) == result

        where:
        value    || result
        1234     || 1234
        4321.56d || 4322
        1111.56f || 1112
    }
}

然后您会看到所有测试用例都通过了测试,并且您还可以在输出中看到将哪个类的数据传递到测试中:

enter image description here

因此,IntegerDoubleFloat是通过的,而不是在编写时在所有情况下都是Integer

我在测试中看到的是,您两次将result值作为Double,但是Math.round()每次都返回很长。

grails datatable spock
1个回答
0
投票

Grails 4使用org.spockframework:spock-core:1.2-groovy-2.5

,在此版本中,它按预期工作(与其他Spock版本一样)。
© www.soinside.com 2019 - 2024. All rights reserved.