Comment faire pour supprimer et de vérifier private static appels de méthode?
Je suis actuellement en train de trébucher dans JUnit tests et ont besoin d'un peu d'aide. Je me suis donc cette classe avec des méthodes statiques qui permettra de revoir certaines des objets. Pour la simplification de souci, j'ai fait un petit exemple. C'est ma classe Factory:
class Factory {
public static String factorObject() throws Exception {
String s = "Hello Mary Lou";
checkString(s);
return s;
}
private static void checkString(String s) throws Exception {
throw new Exception();
}
}
Et c'est ma classe de Test:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Factory.class })
public class Tests extends TestCase {
public void testFactory() throws Exception {
mockStatic(Factory.class);
suppress(method(Factory.class, "checkString"));
String s = Factory.factorObject();
assertEquals("Hello Mary Lou", s);
}
}
Fondamentalement, ce que j'ai essayé de l'atteindre, c'est que la méthode privée checkString() doit être supprimée (si l'Exception n'est pas levée), et doivent également vérifier que la méthode checkString() a été fait appel à la méthode factorObject().
Mis à JOUR:
La répression fonctionne correctement avec le code suivant:
suppress(method(Factory.class, "checkString", String.class));
String s = Factory.factorObject();
... cependant, il me renvoie NULL pour la Chaîne "s". Pourquoi est-ce?
Je suis d'accord avec vous, mais actuellement, il n'existe aucun moyen de modifier le code existant, par conséquent, la vérification doit se produire un peu plus compliqué.
OriginalL'auteur Malvin | 2013-05-09
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai enfin trouvé la solution à tous les problèmes. Si quelqu'un bute sur des problèmes similaires voici le code:
mockStatic
,suppress
,method
etverifyPrivate
?Bien sûr. Ajouté ci-dessus 🙂
Pour des fins de test, j'ai aussi utilisé des paquets autonomes avec toutes les dépendances: code.google.com/p/powermock/downloads/... Si vous utilisez Maven, vous pourriez avoir besoin de moins.
Cela m'a beaucoup aidé. Merci beaucoup pour donner un code aperçu de la façon de le faire fonctionner.
OriginalL'auteur Malvin
Yo peut le faire comme:
Pour plus de détails, vous pouvez visiter :
http://powermock.googlecode.com/svn/docs/powermock-1.3.7/apidocs/org/powermock/api/mockito/PowerMockito.html
Edit:
La vérification de........
Maintenant, regardez le modifier de la partie.
Je l'ai essayé maintenant comme ceci: mockStatic(Factory.class); Usine de spy = spy(Usine nouvelle()); PowerMockito.ne rien faire().quand(Factory.class,"checkString", Mockito.tout(String.class)); String s = spy.factorObject(); <br> Mais maintenant, il me renvoie un <null> String s. Je ne comprends pas...
La répression semble fonctionner bien. Quand je fais supprimer(méthode(Factory.class, "checkString", String.class)); Malheureusement, j'ai aussi une <null> au lieu de la Chaîne déclarée dans la méthode. Mais au moins, la Méthode privée est supprimée évidemment. Mais encore, pourquoi la chaîne soudainement de nulle?
OriginalL'auteur Shreyos Adikari