2015-08-12 13 views
13

Mam do czynienia z osobliwym problemem. Zasadniczo, gdy uruchomię mój test Mockito/PowerMockito normalnie znaczy „Uruchom jako JUnit test”, to daje mi następujący błąd:Test mockito nie daje takiego błędu metody, gdy uruchamiany jest jako test jednoczęściowy, ale gdy słoiki są dodawane ręcznie w konfuguracjach uruchomionych, działa dobrze

java.lang.NoSuchMethodError: org.mockito.mock.MockCreationSettings.isUsingConstructor()Z 
at org.mockito.internal.creation.instance.InstantiatorProvider.getInstantiator(InstantiatorProvider.java:10) 
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:110) 
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:58) 
at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:203) 
at org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.java:106) 
at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:54) 
at org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:90) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:292) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) 
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) 
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120) 
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) 
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106) 
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

próbowałem dodaniu wszystkich wymaganych słoików w zależności maven jak również w budować ścieżkę, ale bezskutecznie.

Jednak dodałem słoiki ręcznie w konfiguracjach uruchamiania-> classpath-> wpisy użytkownika. Następnie przeprowadziłem test tak jak zwykle i wyświetlił się zielony pasek stanu, to znaczy działał idealnie.

Proszę mi pomóc w tej sprawie. Muszę przeprowadzić test bez tych denerwujących zmian, które mogłyby wpłynąć na moją pracę. Co mogę zrobić, aby móc uruchomić test normalnie, tj. Bez przechodzenia przez całą konfigurację, ale po prostu dodając słoiki w ścieżce budowania, a następnie "uruchamiać jako test junitowy"?

+0

Zakładam, że problem polega na uruchomieniu testów w IDE - jakiego używacie IDE? –

+0

Dzięki..its eclipse kepler –

Odpowiedz

22

Spróbuj Ctrl + Shift + T na ekranie zaćmienia. Sprawdź jakie są twoje wyniki. Idealnie Zaćmienie powinno rozwiązać tę klasę tylko z jednej zależności. Jeśli otrzymujesz wiele wyników, może być konieczne dodanie wykluczenia dla niektórych zależności.

enter image description here

także sprawdzić, czy jesteś w stanie wykonać swoich przypadków testowych z wiersza poleceń. Jeśli jesteś w stanie to zrobić, to nie jest to żaden problem. Ale jeśli coś tu nie działa, sprawdź zależności.

+0

Dziękuję źle, sprawdź to .. –

+0

Zadziałało. Usunąłem dodatkowy konfliktowy słoik z innego projektu i teraz jest w porządku ... Dzięki ... –

+1

Pracowałem też dla mnie. – Apokai

1

Twoje IDE musi być zsynchronizowane z Maven, co robisz ręcznie, dodając zależności.

Niestety Eclipse nie (lub nie) zapewnia to zachowanie natychmiast po uruchomieniu (w przeciwieństwie do IntelliJ, która synchronizuje się płynnie).

Rozwiązaniem, które kiedyś było zrobione przy użyciu Maven Eclipse Plugin, ale patrząc na dokumenty, które wydają się być najnowszym sposobem, jest wtyczka Eclipse Maven Integration dla IDE.

+0

Spróbuję tego. Wielkie dzięki! –

7

Dla mnie wersja mockito tworzyła problemy. Po prostu usuń zależność od mockito, jeśli dodałeś jawnie w swoim pliku pom. Właśnie usunąłem -

testCompile 'org.mockito:mockito-all:1.9.5' 

linię z mojego pliku gradle. Pozwala na próbne naprawianie i dodawanie uzależnienia od mockito, którego potrzebuje na własną rękę, zamiast narzucania go na siłę, co może doprowadzić do konfliktu.

więc dla mnie są zależnościami -

testCompile "org.powermock:powermock-module-junit4:1.6.4" 
testCompile "org.powermock:powermock-module-junit4-rule:1.6.4" 
testCompile "org.powermock:powermock-api-mockito:1.6.4" 
testCompile "org.powermock:powermock-classloading-xstream:1.6.4" 

inny niż JUnit i innych lib zależności może być.