如何在spock for Grails域模拟中避免空字段错误
在这个简单的域中使用Grails2.2.0如何在spock for Grails域模拟中避免空字段错误,grails,spock,Grails,Spock,在这个简单的域中使用Grails2.2.0 class Order { static mapping = {table "ticket_order"} String foo } 和相关的斯波克试验 @TestFor(Order) class OrderSpec extends Specification { def "sensible constraints for order class"() { setup: mockForConstraintsTes
class Order {
static mapping = {table "ticket_order"}
String foo
}
和相关的斯波克试验
@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];
有人能解释一下为什么我得到空值,我没有正确设置属性吗?我已经尝试了一些简单的公式,但毫无乐趣。它在标准单元测试中运行良好。在我看来,它就像是您混合了数据驱动和基于交互的测试风格。 where块仅在数据驱动的上下文中提到,而when/then组合则在交互测试的上下文中提到
尝试将def foo=“bar”放在测试的顶部。
然后
可以用于任何测试(不仅仅是基于交互),并且它与where
一起工作良好。您是否尝试过普通JUnit测试?我最好的猜测是这个问题与斯波克无关。