ont un objet de domaine Grails qui a une fonction statique sur mesure pour saisir les données de la base de donnéesComment simulez-vous une méthode statique d'un objet de domaine dans Grails?
class Foo {
/* member variables, mapping, constraints, etc. */
static findByCustomCriteria(someParameter, List listParameter) {
/* code to get stuff from the database... */
/*
Return value is a map
["one": "uno", "two": "due", "three": "tre"]
*/
}
}
La fonction statique findByCustomCriteria
utilise createCriteria()
pour construire la requête qui extrait des données de la table Foo, ce qui signifie mockDomain(Foo)
ne fonctionne pas correctement lors des tests unitaires. Ce que j'essaie de faire pour contourner ce problème, c'est d'utiliser l'une des méthodes générales de moquerie pour se moquer de findByCustomCriteria
, mais je ne peux pas obtenir la syntaxe tout à fait raison.
J'ai un contrôleur BarController
que j'essaie de tester, et enterré dans l'appel à BarController.someFunction()
il y a un appel à Foo.findByCustomCriteria()
.
class BarControllerTest extends ControllerUnitTestCase {
protected void setUp() {
super.setUp()
}
protected void tearDown() {
super.tearDown()
}
void testSomeFunction() {
/* Mocking for Foo goes here */
assertEquals("someValue", controller.someFunction())
}
}
Qu'est-ce qui serait un moyen de se moquer de cela?
J'ai essayé d'utiliser new MockFor()
, mockFor()
et metaClass
, mais je n'arrive pas à le faire fonctionner.
Edit:
Chaque fois que j'essayé de se moquer de ceci, j'ai essayé de se moquer comme si ...
Foo.metaClass.'static'.findByCustomCriteria = { someParam, anotherParam ->
["one": "uno", "two": "due", "three": "tre"]
}
Je suppose que je ne mentionnaient pas assez d'informations au départ.
mettre les trucs moqueur et foo dans ... c'est ce que nous devons voir pour aider – hvgotcodes