Powermock (Avec Easymock) pas de dernier appel sur une maquette disponible
Je suis en train de l'exécuter d'un simple cas de test. J'ai la méthode suivante.
public static void run(String[] args) throws Throwable {
CommandLineArguments opts = CommandLineOptionProcessor.getOpts(args);
}
Je vais continuer à construire cette méthode /cas de test que je vais. Cependant, je voulais juste être sûr qu'un simple cas de test d'abord travaillé. J'ai donc écrit le test suivant.
@Test
public void testRun() {
String[] args = {"--arg1", "value", "--arg2", "value2"};
mockStatic(CommandLineOptionProcessor.class);
expect(CommandLineOptionProcessor.getOpts(args));
EasyMock.replay(CommandLineOptionProcessor.class);
}
Après que j'obtiens l'erreur suivante:
java.lang.IllegalStateException: no last call on a mock available
J'ai lu que certains autres postes sur StackOverflow mais leur solution semble être qu'ils ont été à l'aide de PowerMock avec Mockito. Je suis à l'aide de Powermock et Easymock, ce qui ne devrait pas être le problème.
J'ai suivi les conseils de René et ajouté ce qui suit à la partie supérieure de ma classe.
@PrepareForTest(CommandLineOptionProcessor.class)
@RunWith(PowerMockRunner.class)
public class DataAssemblerTest {
J'ai corrigé l'erreur précédente. Mais maintenant j'ai cette erreur.
java.lang.IllegalArgumentException: Not a mock: java.lang.Class
at org.easymock.internal.ClassExtensionHelper.getControl(ClassExtensionHelper.java:61)
at org.easymock.EasyMock.getControl(EasyMock.java:2172)
at org.easymock.EasyMock.replay(EasyMock.java:2074)
.
.
.
Toutes les idées sur ce qui pourrait être à l'origine de ce serait génial.
Pas de. Je ne suis actuellement pas à l'aide de Maven.
J'ai résolu le problème avec JavaAssist. S'avère que je n'ai tout simplement pas la Bibliothèque dans le projet. Donc, c'est bien maintenant. Cependant, j'ai maintenant cette nouvelle émission qui dit "ne Pas être un simulacre'.
J'ai mis à jour la réponse
OriginalL'auteur Cameron Jones | 2013-11-21
Vous devez vous connecter pour publier un commentaire.
Avez-vous d'annoter la classe de test avec
@RunWith(PowerMockRunner.class)
et@PrepareForTest(CommandLineOptionProcessor.class)
?Vous avez besoin de la
@PrepareForTest(CommandLineOptionProcessor.class)
à la classe de test de niveau. Voir la Powermock doc:Également veiller à ce que les bibliothèques requises sont sur le test classpath.
Dans votre cas, la javassist bibliothèque est manquant. Le mettre sur le chemin de la classe. Peut-être quelques autres libs sont également absents... on verra bien.
Si vous obtenez
vous utilisez
EasyMock.replay()
, mais vous devez utiliserPowerMock.replay()
Ouais je viens de trouver ça aussi. J'ai dû faire une modification de plus de mon test (mais c'était juste mon test de défaut). Il fonctionne très bien maintenant. Merci pour toute l'aide et la procédure pas à pas de se moquer d'une méthode statique w/ Powermock. Def. un peu déroutant lorsque vous êtes nouveau à elle.
OriginalL'auteur René Link
ou
ou
n'est pas présent dans votre code, doit être postérieure à la méthode que vous voulez tester
c'est dans le cas où votre méthode de test est une méthode void.
sinon, vous pouvez utiliser :
aussi s'il vous plaît ajoutez à cela vous classe de test :
J'ai eu un problème - une exception lorsqu'on l'a essayé, à se moquer de classes statiques et cela m'a aidé.
OriginalL'auteur Radu Toader