2014-11-25 13 views
11

Próbuję mock konstruktor korzystając PowerMockito ale za każdym razem uruchomić test pojawia się następujący błąd:PowerMock rzuca NoSuchMethodError (setMockName)

java.lang.NoSuchMethodError: org.mockito.internal.creation.MockSettingsImpl.setMockName(Lorg/mockito/mock/MockName;)Lorg/mockito/internal/creation/settings/CreationSettings; 
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:107) 
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60) 
at org.powermock.api.mockito.internal.expectation.DefaultConstructorExpectationSetup.createNewSubstituteMock(DefaultConstructorExpectationSetup.java:105) 
at org.powermock.api.mockito.internal.expectation.DefaultConstructorExpectationSetup.withAnyArguments(DefaultConstructorExpectationSetup.java:71) 

Mam następujące zależności PowerMock w moim projekcie:

  • org.powermock: powermock-module-junit4: 1.5.6
  • org.powermock: powermock-Mockito-release-full: 1.5.6

Zidentyfikowaliśmy drzewo zależności mojego projektu i naprawiłem konflikty, aby mockito-all:1.9.5 został dołączony do kompilacji.

+0

możesz odpowiadać [ ta konfiguracja] (https://code.google.com/p/powermock/wiki/Mockito_maven) i sprawdź, czy rozwiązuje problem. –

+0

To jest to, czego użyłem pierwotnie, ale generuje ten sam błąd. –

+0

Być może powinieneś dodać pełne drzewo zależności –

Odpowiedz

7

Mój problem wynikał z konfliktów wersji javassist w zależnościach mojego projektu (przechodniego). Poszukiwałem wszystkich zależności, które umieszczają starą wersję javassist w kompilacji, a następnie je wykluczam. Na przykład:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>3.5.1-Final</version> 
    <scope>provided</scope> 
    <exclusions> 
     <exclusion> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+0

jak mogę znaleźć - które zależności używają starej wersji javaassist? BDW używam gradle ... proszę przewodnika –

+0

Możesz użyć zadania ': dependencies' w Gradle, aby zobaczyć, które z nich używają javassist. Możesz użyć narzędzi takich jak grep, less itp., Aby pomóc w wyszukiwaniu.Gdy zobaczysz, które z nich go używają, wyklucz je i powtarzaj proces, dopóki nie wyłączysz wszystkich zależności javassist (przechodnich). Następnie albo cofnij się, aż będziesz potrzebował wersji javassist z innej zależności, albo dodaj wersję, którą chcesz, jako zależność jawnie. Tak przynajmniej bym to zrobił. –

1

Dla mnie, w Eclipse, poprawka do tego problemu została znaleziona w ścieżce budowania Java. Kliknij kartę Zamów i eksportuj. Przenieś Biblioteki aplikacji WWW do u dołu. Zwróć uwagę, że w razie potrzeby umożliwi to również przeglądanie źródeł bibliotek innych firm, gdy Eclipse powie Ci, że nie można znaleźć źródła.

4

miałem

org.mockito mockito-all 1.8.4

dodany do mojego pom.xml oprócz dependecies powermock użytkownika, usuwając ten pracował dla mnie.

+1

Dzięki, naprawiłem to dla mnie - w zasadzie, jeśli korzystasz z Powermock, powinieneś pozwolić Powermock zdefiniować zależności dla Mockito, zamiast przesłonić je potencjalnie nieaktualną wersją – PaulNUK

+0

To była poprawna odpowiedź. Mając Powermock i mockito - wszystkie są w konflikcie. – sinisterrook

+0

Dla mnie też pracował, Nie dodawaj wyraźnie mockito. Niech powermock pobierze i rozwiąże zależność na podstawie jego wersji. –

0

W moim przypadku była to zależność od konfliktu. miałem naprawić po wykluczyć Mockito-core artefakt:

<dependency> 
     <groupId>com.googlecode.catch-exception</groupId> 
     <artifactId>catch-exception</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.mockito</groupId> 
       <artifactId>mockito-core</artifactId> 
      </exclusion> 
     </exclusions> 
     <version>1.0.4</version> 
     <scope>test</scope> 
    </dependency> 
32

Upewnij powermockito i mockito wersje są wyrównane jak w tym wykresie wersje - MockitoUsage#supported-versions,

Mockito      | PowerMock 
------------------------------------------------------------------------------ 
2.0.0-beta - 2.0.42-beta | 1.6.5+ 
------------------------------------------------------------------------------ 
1.10.19      | 1.6.4 
1.10.8 - 1.10.x    | 1.6.2+ 
1.9.5-rc1 - 1.9.5   | 1.5.0 - 1.5.6 
1.9.0-rc1 & 1.9.0   | 1.4.10 - 1.4.12 
1.8.5      | 1.3.9 - 1.4.9 
1.8.4      | 1.3.7 & 1.3.8 
1.8.3      | 1.3.6 
1.8.1 & 1.8.2    | 1.3.5 
1.8       | 1.3 
1.7       | 1.2.5 

łatwy sposób znaleźć mockito i powermock-mockito wersja przy użyciu maven jest,

mvn dependency:tree | grep mockito 
[INFO] | \- org.mockito:mockito-core:jar:1.8.5:compile 
[INFO] +- org.mockito:mockito-all:jar:1.8.5:compile 
[INFO] +- org.powermock:powermock-api-mockito:jar:1.4.9:compile 

problem może być sprzeczne wersje mockito we wniosku i jeden, który powermockito zastosowania, jako sprzeczne poniżej w moim przypadku używam powermock 1.6.5 która nie obsługuje mockito 1.8.5

mvn clean dependency:tree | grep mockito 
[INFO] +- org.mockito:mockito-all:jar:1.8.5:compile 

[INFO] \- org.powermock:powermock-api-mockito:jar:1.6.5:compile 
[INFO] +- org.mockito:mockito-core:jar:1.10.19:compile 
[INFO] \- org.powermock:powermock-api-mockito-common:jar:1.6.5:compile 
Powiązane problemy