Impossible d’exécuter le test JUnit avec PowerMockRunner

J’ai un projet Java basé sur Gradle si je veux maintenant me moquer d’une méthode privée avec PowerMock. Le problème est que je ne peux pas utiliser le PowerMockRunner car j’obtiens toujours l’exception suivante lorsque j’ajoute l’ @RunWith(org.powermock.modules.junit4.PowerMockRunner.class) .

Erreur:

 org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator. at org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:581) at org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308) at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate TestMethods(PowerMockJUnit4MethodValidator.java:79) at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate InstanceMethods(PowerMockJUnit4MethodValidator.java:49) at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108) ... 

Ce sont mes dépendances de test:

 testComstack 'junit:junit:4.+', 'org.powermock:powermock-core:1.5.6', 'org.powermock:powermock-module-junit4:1.5.6', 'org.powermock:powermock-api-mockito:1.5.6' 

Le test lui-même échoue également lorsqu’il est complètement vide (erreur d’initialisation):

 @RunWith(PowerMockRunner.class) public class SomeTest { @Test public void testSomething() { } } 

Des idées sur ce qui pourrait être faux? D’autres tests utilisant PowerMock fonctionnent correctement (aucun n’utilise le PowerMockRunner).

Salutations et merci pour toute aide! Ben

Ceci est un bogue qui se produit lorsque vous utilisez JUnit 4.12 et PowerMock <1.6.1. Le problème est résolu dans PowerMock 1.6.1. Veuillez mettre à jour vos dépendances en conséquence

 testComstack 'junit:junit:4.12', 'org.powermock:powermock-core:1.6.1', 'org.powermock:powermock-module-junit4:1.6.1', 'org.powermock:powermock-api-mockito:1.6.1' 

Si vous ne pouvez pas mettre à niveau PowerMock, vous pouvez utiliser JUnit 4.11.

 testComstack 'junit:junit:4.11', 'org.powermock:powermock-core:1.5.6', 'org.powermock:powermock-module-junit4:1.5.6', 'org.powermock:powermock-api-mockito:1.5.6' 

Pourriez-vous, s’il vous plaît, append d’autres lignes du stacktrace, qui permettent de découvrir plus de détails sur le problème.

Il y a eu un bogue enregistré sur PowerMock: https://code.google.com/p/powermock/issues/detail?id=531

Il semble que JUnit ait modifié certains de ses noms de champs internes auxquels PowerMock accédait par reflection, brisant ainsi la capacité de PowerMock à s’injecter correctement.

Vérifiez ce que Stefan a dit et surtout que vous devez append

 @PrepareForTest({, ...}) 

sans la préparation au test, PowerMockRunner ne saura pas quelle classe est moquée.