如何避免Grails域mock中spock中的空字段错误

时间:2013-02-19 11:45:37

标签: grails spock

使用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];

有人可以解释为什么我得到null,我没有正确设置属性吗?我已经尝试了一些简单的配方,没有任何乐趣。它在标准单元测试中工作正常。

1 个答案:

答案 0 :(得分:0)

在我看来,您喜欢混合基于数据驱动和交互的测试样式。 where块仅在数据驱动的上下文中提及,而when / then组合在交互测试的上下文中。

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