Paramètre de requête nommée test avec mockito
Je veux écrire un test Unitaire pour mon dao, mais j'ai un problème. Voici la méthode que je veux tester:
public boolean boo(final String param) {
final Query query = this.entityManager.createNamedQuery("queryName");
query.setParameter(1, param);
boolean isExists = false;
if(query.getResultList().size() != 0) {
isExists = true;
}
return isExists;
}
Le problème avec cette méthode est :
query.setParameter(1, param);
Quand j'écris quelque chose comme :
@Test
public void test() {
when(entityManager.createNamedQuery(queryName)).thenReturn(query);
when(query.getResultList()).thenReturn(new ArrayList());
//when(query.setParameter(1,project.getName())).thenCallRealMethod();
projectDao.boo(name);
}
La requête et de l'entityManager sont moqués.
J'ai NPE, et ce n'est pas une surprise, et je ne peux pas appeler la méthode, car la requête est et de l'interface.
Si quelqu'un pourrait me dire la meilleure façon de définir les paramètres dans NamedQueries pendant le test?
Qu'essayez-vous de test? J'ai pas vu de faire valoir. Et où voulez-vous obtenir votre requête. si la requête est moqué de vous ne devriez pas obtenir un NPE. Si vous voulez tester la requête réelle de la création d'un test d'intégration où vous avez généralement à l'installation de votre DAO est complètement sans moqueries.
OriginalL'auteur Oleksandr | 2011-06-22
Vous devez vous connecter pour publier un commentaire.
Vous êtes censé être la création d'une maquette de l'interface de Requête comme ceci...
Peut-être que vous avez oublié les guillemets doubles autour de la Chaîne littérale "queryName". À partir de votre code, je ne vois pas où la variable queryName est défini sur la dernière ligne ci-dessus.
OriginalL'auteur Brad