2015-07-02 15 views
11

Ho problemi durante il tentativo di eseguire un test dell'unità utilizzando PowerMock con Mockito. Ho bisogno di PowerMockito per deridere un metodo statico.Problema di PowerMock e Java 8: non è possibile eseguire il cast di InterfaceMethodrefInfo su MethodrefInfo

Queste sono le versioni che utilizzano Io:

PowerMock 1.6.2 
Mockito 1.10.19 
JUnit 4.12 
Java 8 

Quando aggiungo il @PrepareForTest di annotazione (Graph.class) ottengo il seguente errore:

java.lang.IllegalStateException: Failed to transform class with name  name.of.my.package.GraphUtil. Reason: javassist.bytecode.InterfaceMethodrefInfo cannot be cast to javassist.bytecode.MethodrefInfo 

ho letto nel pagina ufficiale PowerMock di Google relativa a javassist. Ma sono un po 'perso e non so come ripararlo.

Nel caso, ho anche provato a scaricare l'ultimo SNAPSHOT di Powermock (1.6.3-SNAPSHOT) ma non ha funzionato neanche.

Qualcuno potrebbe aiutarmi, per favore?

Grazie in anticipo

+1

Bene nel numero di inseguitore di javassist c'era un bug legato (https://issues.jboss.org/browse/JASSIST-220) a tale eccezione e il sig. Chiba ha accorpato una richiesta di richiamo il 22 luglio 2014 (https://github.com/jboss-javassist/javassist/pull/11). Il mio primo suggerimento sarebbe quello di assicurarmi di utilizzare l'ultima versione di javassist e se l'aggiornamento alla versione più recente. – pabrantes

+0

per favore aggiungi quel commento come risposta personale e accettalo in modo che la domanda non rimanga senza risposta. Grazie :) – pabrantes

risposta

1

Sì, quello era il problema. PowerMock ha una dipendenza da javassist, quindi ho dovuto solo escludere quella dipendenza transitiva nel mio pom e successivamente includere la dipendenza dalla versione fissa di javassist. E quello ha funzionato per me. Grazie!

+3

menziona versioni specifiche con problemi e correzioni, e il campione pom aiuterebbe molto le persone. –

11

seguito Francisco González's risposta, questo è quello che dovevo fare:

<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-module-junit4</artifactId> 
    <version>1.5.5</version> 
    <scope>test</scope> 
    <exclusions> 
     <exclusion> 
      <groupId>org.javassist</groupId> 
       <artifactId>javassist</artifactId> 
     </exclusion> 
    </exclusions>  
</dependency> 
<dependency> 
    <groupId>org.javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.20.0-GA</version> 
    <scope>test</scope> 
</dependency> 
+0

* non funziona * se un'altra dipendenza del progetto dipende da 'javassist' (e.x. ibernazione). Devi rimuovere ' test' quando aggiungi la dipendenza 'javassist'. – Arashsoft