2011-05-24 2 views
1

La constellation suivante dans un rendement de test unitaire: No such property: title for class: myproject.Item Possible solutions: titleComment puis-je me débarrasser de "pas une telle propriété" lors du test d'une classe qui accède à Item.constraints.xyz?

ItemController.groovy

def add = { 
    [itemInstance: new Item(), titleMin: Item.constraints.title.size.min() ] 
} 

ItemControllerSpec.groovy

mockDomain Item 
def result = controller.add() 

Comment puis-je moqueront que la ligne de contraintes?

Remarque: Je veux simplement que le test s'exécute au lieu d'échouer en raison de cette ligne.

Répondre

2

Via metaClass. En setUp(), écrire quelque chose comme: Item.metaClass.'static'.constraints = [ title: [ size: [ min: {5}, max: {30} ] ] ]

+0

Cela a échoué dans mon cas. Cependant, grâce à votre indice, Victor, j'ai été en mesure de trouver la solution suivante: 'Item.metaClass.'static'.getConstraints = {[title: \t [size: 5..20]]}' – user569825

1

Si votre classe de test étend GrailUnitTestCase, appelez mockForConstraintsTests(Item) avant le test exécute. Si vous ne pouvez pas étendre cette classe, essayez d'appeler grails.test.MockUtils.prepareForConstraintsTests(Item) avant que le test s'exécute.

+0

Don, les deux variantes échouent avec le même message d'erreur que celui décrit dans ma publication initiale. Je l'ai également essayé avec un ItemControllerTests.groovy nouvellement généré avec rien d'autre que le 'testSomething' en place. Avez-vous eu une situation similaire, où cela a-t-il fonctionné? – user569825

Questions connexes