2013-02-19 3 views
0

Использование Grails 2.2.0 дал этот простой областиКак избежать ошибок нулевых полей в Спока домена Grails издеваться

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

Может кто-нибудь объяснить, почему я получаю этот нуль, не правильно ли я установил свойство? Я попробовал несколько простых формулировок этого без радости. Он отлично работает в стандартном модульном тесте.

+0

Вы пробовали использовать простой тест JUnit? Мое лучшее предположение заключается в том, что проблема не связана с Споком. –

ответ

0

Мне кажется, что вы смешаете стили тестирования, основанные на данных и взаимодействии. Блок, где блок упоминается только в контексте управляемого данными, и когда/затем комбо в контексте тестирования взаимодействия.

Попробуйте ввести def foo = "bar" в верхней части теста.

+0

'when-then' может использоваться для любого теста (а не только для взаимодействия), и он отлично работает вместе с' where'. –

+0

Спасибо, что исправил меня @PeterNiederwieser. – 34m0

Смежные вопросы