0

给定这个简单的域,使用 grails 2.2.0

class Order {
    static mapping = {table "ticket_order"}

    String foo
}

以及相关的 spock 测试

@TestFor(Order)
class OrderSpec extends Specification {
def "sensible constraints for order class"() {
    setup:
      mockForConstraintsTests(Order)

      when:
      def order = new Order(
        foo : foo
      )
      order.validate()

      then:
        !order.errors.hasFieldErrors("foo")

      where:
        foo = "bar"

}
}

我得到这个输出

grails> test-app unit: Order -echoOut
| Running 1 spock test... 1 of 1
--Output from sensible constraints for order class--
| Failure:  sensible constraints for order class(uk.co.seoss.presscm.OrderSpec)
|  Condition not satisfied:

!order.errors.hasFieldErrors("foo")
||     |      |
||     |      true
||     org.codehaus.groovy.grails.plugins.testing.GrailsMockErrors: 1 errors
||     Field error in object 'uk.co.seoss.presscm.Order' on field 'foo': rejected value [null];

有人可以解释为什么我得到那个空值,我没有正确设置属性吗?我已经尝试了一些更简单的公式,但没有任何乐趣。它在标准单元测试中运行良好。

4

1 回答 1

0

在我看来,您将数据驱动和基于交互的测试风格混合在一起。where 块仅在数据驱动的上下文中被提及,而 when/then 组合在交互测试的上下文中被提及。

尝试将 def foo = "bar" 放在测试的顶部。

于 2013-02-19T19:23:36.140 回答