PowerMock de expectNew() n'est pas en se moquant d'un constructeur comme prévu
Je suis en train d'apprendre les tenants et les aboutissants des diverses moqueries des bibliothèques et des PowerMock(en particulier le EasyMock extension) est le prochain sur la liste. Je suis d'essayer de se moquer d'un constructeur et les exemples fournis n'ont pas la même réaction lorsque j'essaie de les reproduire. Aussi loin que je peux dire, il ne se moque de l'constructeur et simplement un produit comme si c'était normal.
C'est la classe de test:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Writer.class})
public class FaultInjectionSituationTest {
@Test
public void testActionFail() throws Exception {
FaultInjectionSituation fis = new FaultInjectionSituation();
PowerMock.expectNew(Writer.class, "test")
.andThrow(new IOException("thrown from mock"));
PowerMock.replay(Writer.class);
System.out.println(fis.action());
PowerMock.verify(Writer.class);
}
}
J'ai essayé de remplacer le "test" avec un EasyMock.isA(String.class), mais il a donné les mêmes résultats.
C'est le FaultInjectionSituation:
public class FaultInjectionSituation {
public String action(){
Writer w;
try {
w = new Writer("test");
} catch (IOException e) {
System.out.println("thrown: " + e.getMessage());
return e.getLocalizedMessage();
}
return "returned without throw";
}
}
La "Écrivain" n'est rien de plus qu'une coquille d'une classe:
public class Writer {
public Writer(String s) throws IOException {
}
public Writer() throws IOException{
}
}
Lorsque le test est exécuté, il affiche "retourné sans jeter", indiquant que l'exception n'a jamais été levée.
OriginalL'auteur AdamSpurgin | 2012-09-10
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour préparer la classe qui est d'appeler le constructeur, ainsi PowerMock sait attendre à une moqué d'appel de constructeur. Essayez de mettre à jour votre code par le suivant:
J'ai couru dans la même question... Précisément ce qui me manquait 🙂
Merci beaucoup, j'ai lutté pendant un long moment jusqu'à ce que j'ai trouvé cette réponse.
OriginalL'auteur rrufai
Vous devez d'abord créer un objet fantaisie:
désolé, je vois ce que vous essayez de faire. J'ai juste essayé votre code sur JUnit 4 et il imprime "jeté de se moquer" (ce que vous attendez). Êtes-vous à l'aide de TestNG, par hasard? Je ne suis pas familier avec TestNG, mais quand je l'ai couru à l'aide de TestNG, je me suis "retourné sans jeter"
Je suis en utilisant Junit4. Je ne peux pas penser à quelque chose qui serait la cause de ne pas travailler.
Je ne pense pas qu'il ya quelque chose de mal avec votre code (que j'ai réussi à obtenir le résultat souhaité). Comment êtes-vous en cours d'exécution JUnit? À partir d'un IDE ou ligne de commande?
J'ai essayé les deux. Je vais les transmettre à un collègue de travail à exécuter sur leur machine, peut-être, qui aide à mieux comprendre le problème.
OriginalL'auteur fo_x86