2010-04-07 2 views
0

je suit comme mon test unitaire:Contrôle des contraintes personnalisées dans Grails App

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

    } 

Mais quand je lance le test, je reçois l'erreur suivante:

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

-je utiliser des contraintes personnalisées dans ma classe de domaine. Comment puis-je tester cela?

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

Répondre

2

Essayez de changer mockForConstraintsTests() à mockDomain() - méthode que vous utilisez un Dealer.findX() dans la contrainte, qui repose sur le domaine du concessionnaire. Par ailleurs, le test échouera toujours à moins que vous ayez créé un revendeur similaire dans la méthode setUp() de la classe de test.

+0

Merci Ali J'ai modifié mon code et fait quelques recherches sur mockDomain. Je changé mon code pour: http://wb.pastebin.com/g1jCwVAM Mais encore la validation n'est pas PASSENT S'il vous plaît laissez-moi savoir si je manque quelque chose ici PRÉCIEUSE.. – WaZ

+0

Bonjour WaZ, je ne suis pas familier avec cette utilisation de mockForConstraintsTest. mockDomain() devrait mettre en place le test de contrainte. Les passes suivantes: http://pastebin.com/w4mHmFH0 – Armand

+0

homme fantastique Cheers. – WaZ

0

Dans les tests unitaires, même avec mockDomain, l'attribut id des objets de domaine n'est pas défini automatiquement ou auto-incrémenté. Tous les objets de domaine que vous créez auront un identifiant de null sauf si vous l'avez défini explicitement.

Votre test échoue probablement parce que le test obj.id == similarDealer.id est vrai, car ils ont tous les deux id: null. Essayez de définir l'attribut id de vos objets de concessionnaires mockés.

+0

pas sûr, parce que cela semble fonctionner sans moi pour implémenter l'incrément automatique. – WaZ

Questions connexes