2014-10-04 24 views
45

Ho un progetto Java basato su Gradle se ora volessi prendere in giro un metodo privato usando PowerMock. Il problema è che non sono in grado di utilizzare PowerMockRunner poiché ottengo sempre la seguente eccezione quando aggiungo l'annotazione @RunWith(org.powermock.modules.junit4.PowerMockRunner.class).Impossibile eseguire il test JUnit con PowerMockRunner

Errore:

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) 
... 

Questo sono le mie dipendenze di prova:

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' 

La prova stessa fallisce anche quando completamente vuoto (errore di inizializzazione):

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

Tutte le idee che potrebbero essere in errore? Altri test che utilizzano PowerMock funzionano correttamente (nessuno di essi usa PowerMockRunner).

Saluti e grazie per qualsiasi aiuto! Ben

risposta

66

Si tratta di un errore che si verifica quando si utilizza JUnit 4.12 e PowerMock < 1.6.1. Il problema è risolto in PowerMock 1.6.1. Si prega di aggiornare le dipendenze di conseguenza

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' 

Se non è possibile aggiornare PowerMock quindi è possibile utilizzare 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' 

La prego di aggiungere ulteriori linee del stacktrace, che scoprono ulteriori dettagli sul problema.

+0

Grazie mille !!! È normale che Gradle tenga anche versioni beta? – Ben

+2

Non sembra essere risolto in 4.12 ... – Mag

+2

Questo problema è stato risolto con PowerMock 1.6.1 per fortuna. – JeeBee

0

Verifica a quanto detto Stefan, e, soprattutto, che è inoltre necessario aggiungere

@PrepareForTest({<The class/es you are Mocking>, ...}) 

senza la preparazione per la prova, PowerMockRunner non si sa quale classe viene preso in giro.

1

C'è stato un bug registrati contro PowerMock: https://code.google.com/p/powermock/issues/detail?id=531

Sembra che JUnit ha cambiato alcuni dei suoi nomi di campo interno che PowerMock stava accedendo attraverso la riflessione, rompendo così la possibilità per PowerMock di iniettare correttamente se stesso.

Problemi correlati