J'ai un projet basé sur Gradle Java projet où je veux maintenant me moquer d'une méthode privée à l'aide de PowerMock. Le problème est que je ne peux pas utiliser PowerMockRunner car je reçois toujours l'exception suivante lorsque j'ajoute l'annotation @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:
testCompile '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 ce qui pourrait être faux? D'autres tests utilisant PowerMock fonctionnent correctement (aucun d'entre eux n'utilise le PowerMockRunner).
Salutations et merci pour toute aide! Ben
Il s'agit d'un bogue qui survient 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
testCompile '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.
testCompile '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 ajouter d'autres lignes du stacktrace, qui fournissent plus de détails sur le problème.
Un bogue a été enregistré contre PowerMock: https://code.google.com/p/powermock/issues/detail?id=531
Il semble que JUnit ait modifié certains des noms de champs internes auxquels PowerMock avait accès via la réflexion, empêchant ainsi PowerMock de s’injecter correctement.
Vérifiez ce que Stefan a dit, et surtout vous devez également ajouter
@PrepareForTest({<The class/es you are Mocking>, ...})
sans préparation au test, PowerMockRunner ne saura pas quelle classe est moquée.