2013-09-27 12 views
9

Chciałbym skorzystać z Powermock z Mockito, aby sfingować niektóre statyczne wywołania metod. Postępowałem zgodnie z instrukcjami i przykładami z SO, jak również z PowerMock Getting Started i MockStatic stron najlepiej jak potrafię, ale mam jeszcze ukończyć wywołanie mockStatic().Konfigurowanie Powemockito do kpiny statycznej

Kiedy zadzwonić mockStatic (foo.class) z mojej klasy testowej, mam otrzymać excception:

java.lang.NoClassDefFoundError: org/Mockito/mock/MockName 
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:70) 
at ...my test class method call... 

jestem pewien, że to jest problem konfiguracji, jak byłem znalezienie terminologii stosowanej za ustawienie to jest dość mylące. Zrobiłem Zip z Mockito z PowerMock downloads. W Eclipse (3.5.2) otworzyłem właściwości projektu i dodałem wszystkie słoiki do ścieżki budowania. Próbowałem również dodać cały rozpakowany folder powermockito do vas classpath środowiska środowiska, a następnie tylko słoik powermockito, szczególnie, gdy to się nie udało.

mam te annotationsat klasy poziomu mojej klasie testowej, jak również, za instrukcjami powermock:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ApplicationContextLoader.class) 

Również te przywozy powermock specyficzne:

import org.powermock.api.mockito.PowerMockito; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

do tych z was, którzy korzystałem już z PowerMockito, nawet po prostu wskaźnik w dobrym kierunku, albo coś, co sprawdził byłoby naprawdę pomocne. Staram się zobaczyć, jak różnią się moje ustawienia od tych z postów, które widziałem, używając - z tego co wiem - tej samej składni.

+0

Czy kiedykolwiek znaleźć rozwiązanie? – Dave

+0

Nie, żebym pamiętał, chociaż minęło kilka lat. Mam odpowiedź od @Walls upvoted, więc to musiała być najbardziej pomocna od rozwiązania. – Ubunfu

Odpowiedz

3

Jeśli używasz statycznego obiektu próbnego, w adnotacji PrepareForTest dodaj klasę, która KORZYSTA z obiektu statycznego, oprócz samej klasy statycznej. Jeśli testowana klasa musi używać tego statycznego, dodaj bieżącą klasę do adnotacji. W rzeczywistości nie kpisz z klasy, ale musi ona znajdować się w adnotacji, aby statyczny mógł się z nią połączyć. Brzmi dziwnie, ale działa.

Podczas dodawania wielu klas do adnotacji można je wstawiać wewnątrz {} i oddzielać przecinkami. Na przykład, jeśli klasa statyczna jest StaticA.class a klasa pomocą statycznego CallerOfStatic.class można użyć:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({StaticA.class, CallerOfStatic.class}) 
+0

Dzięki, że ja po prostu starał się, co moje adnotacje wyglądać następująco: '@RunWith (PowerMockRunner.class) @PrepareForTest ({ApplicationContextLoader.class, \t \t TestClass.class}) public class TestClass {..test kod klasy ...} ' – Ubunfu

+0

@Ubunfu to działało :) ??? – Walls

+0

Haha, widocznie byłem zbyt zajęty próbowaniem uczynienia tego czytelnego, by powiedzieć tę część. Ale nie wydaje się, żeby to miało jakikolwiek wpływ. – Ubunfu

24

Prawdopodobnie wersje Powermock i Mockito nie są kompatybilne. Napraw to i nie będzie to już problem n.

Mockito      PowerMock 
1.10.8+      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 to 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 

Patrz: https://github.com/jayway/powermock/wiki/MockitoUsage

0

Upewnij powermockito i Mockito wersje wyrównane jak w tej tabeli - https://github.com/jayway/powermock/wiki/MockitoUsage#supported-versions,

Łatwy sposób znaleźć to,

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

w moim przypadku, powermock 1.5.6 i mockito 1.9.5 zostały wyrównane, ale musiały zostać zmienione, aby używać mockito 1.8.5, jako ne else w zależności już używało mockito 1.8.5.

następującą kombinację doskonale działa na mnie,

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 
Powiązane problemy