Тестване на персонализирани ограничения в приложението 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