2015-07-02 23 views
11

Mam problemy podczas próby wykonania testu jednostki za pomocą PowerMocka z Mockito. Potrzebuję PowerMockito, aby wyśmiać statyczną metodę.Problem PowerMock i Java 8: Metoda InterfaceMethodrefInfo nie może być rzutowana na MethodrefInfo

Są to wersje jestem przy użyciu:

PowerMock 1.6.2 
Mockito 1.10.19 
JUnit 4.12 
Java 8 

Kiedy dodać @PrepareForTest adnotacji (Graph.class) pojawia się następujący błąd:

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 

mam przeczytać w oficjalna strona Google PowerMock powiązana z javassist. Ale jestem trochę zagubiony i nie wiem, jak to naprawić.

Na wszelki wypadek próbowałem także pobrać najnowszą wersję SNAPSHOT z Powermock (1.6.3-SNAPSHOT), ale też nie działała.

Czy ktoś może mi pomóc, proszę?

Z góry dziękuję

+1

Również w trackerze emisyjnej javassist tam był błąd związany (https://issues.jboss.org/browse/JASSIST-220) do tego wyjątku, a pan Chiba połączył wniosek o wycofanie w dniu 22 lipca 2014 r. (https://github.com/jboss-javassist/javassist/pull/11). Moja pierwsza sugestia to upewnienie się, że używasz najnowszej wersji javassist i uaktualnienia do najnowszej wersji. – pabrantes

+0

dodaj ten komentarz jako swoją własną odpowiedź i zaakceptuj, aby pytanie nie pozostało bez odpowiedzi. Dziękuję :) – pabrantes

Odpowiedz

1

Tak, to był problem. PowerMock ma zależność od javassist, więc musiałem wykluczyć tę zależność przechodnią w moim pom, a później włączyć zależność od stałej wersji javassist. I to zadziałało dla mnie. Dzięki!

+3

wspomnieć o konkretnych wersjach z problemem i naprawić, a próbki pom pomogłyby ludziom bardzo dużo. –

11

Po Francisco González's odpowiedź, to co miałem zrobić:

<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

It * NIE działa * jeśli inna zależność twojego projektu zależy od 'javassist' (e.x. hibernate). Musisz usunąć ' test' podczas dodawania zależności 'javassist'. – Arashsoft