Тестирование пользовательских ограничений в приложении Grails

В качестве модульного теста у меня есть следующее:

void testCreateDealer() {
      mockForConstraintsTests(Dealer)
      def _dealer= new Dealer( dealerName:"ABC",
                            Email:"[email protected]",
                            HeadOffice:"",
                            isBranch:false)
       assertFalse _dealer.validate()

    }

Но когда я запускаю тест, я получаю следующую ошибку:

No signature of method: static com.myCompany.Dealer.findByDealerNameIlike() is applicable for argument types: (java.lang.String) values: [ABC]

Я использую некоторые пользовательские ограничения в своем классе предметной области. Как я могу проверить это?

 static constraints = {
     dealerName(blank:false, validator:
            { val, obj ->
                      def similarDealer = Dealer.findByDealerNameIlike(val)
                      return !similarDealer || (obj.id == similarDealer.id)
            }
     )

person WaZ    schedule 07.04.2010    source источник


Ответы (2)


Попробуйте изменить mockForConstraintsTests() на mockDomain() — вы используете метод Dealer.findX() в ограничении, которое зависит от домена Dealer.

Между прочим, тест все равно не пройдет, если вы не создали аналогичного дилера в методе setUp() тестового класса.

person Armand    schedule 07.04.2010
comment
Спасибо, Али, я изменил свой код и провел небольшое исследование mockDomain. Я изменил свой код на: wb.pastebin.com/g1jCwVAM Но проверка все равно не срабатывает. Пожалуйста, дайте мне знать, если я что-то пропустил здесь Очень ценится. - person WaZ; 07.04.2010
comment
Привет, WaZ, я не знаком с таким использованием mockForConstraintsTest. mockDomain() должен настроить тестирование ограничений. Следующие проходы: pastebin.com/w4mHmFH0 - person Armand; 08.04.2010

В модульных тестах, даже с mockDomain, атрибут id объектов домена не устанавливается автоматически или не увеличивается автоматически. Все создаваемые вами объекты домена будут иметь идентификатор null, если вы не установите его явно.

Ваш тест, вероятно, не пройден, потому что тест obj.id == similarDealer.id верен, так как они оба имеют id: null. Попробуйте установить атрибут id ваших объектов издевательского дилера.

person ataylor    schedule 07.04.2010
comment
не уверен, потому что, похоже, автоинкремент работает без меня. - person WaZ; 08.04.2010