Po rozpoczęciu testów pojawia się następujący wyjątek:
Testcase: treeCtorArgumentTest(com.xythos.client.drive.cachedtree.CachedTreeTest): Caused an ERROR
Could not initialize plugin: interface org.mockito.plugins.MockMaker
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker
at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:66)
at com.sun.proxy.$Proxy7.isTypeMockable(Unknown Source)
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:168)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:162)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:64)
at org.mockito.Mockito.mock(Mockito.java:1687)
at org.mockito.Mockito.mock(Mockito.java:1600)
at com.xythos.client.drive.cachedtree.CachedTreeTest.setUp(CachedTreeTest.java:51)
Caused by: java.lang.NoClassDefFoundError: net/bytebuddy/dynamic/loading/ClassLoadingStrategy
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.<init>(SubclassByteBuddyMockMaker.java:33)
at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.<init>(ByteBuddyMockMaker.java:22)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:54)
at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:18)
at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:17)
at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:24)
Caused by: java.lang.ClassNotFoundException: net.bytebuddy.dynamic.loading.ClassLoadingStrategy
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
To jest mój test:
package com.xythos.client.drive.cachedtree;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class CachedTreeTest {
public CachedTreeTest() {
}
@Test
public void treeCtorArgumentTest() {
somemock m = mock(SomeClass.class);
}
}
Używam NetBeans 8.2. Ściągnąłem mockito-core-2.7.0.jar, a następnie wybieram "Test Libraries" -> "Add Jar" i dodałem mockito-core-2.7.0.jar.
Classpath i wszystko wygląda dobrze, wciąż mam wyjątek.
Jakakolwiek rada?
Odpowiedzi:
Jeśli używasz powermock, upewnij się, że Twoje zależności wskazują na:
zamiast
źródło
Brak odniesienia do:
Od wersji beta Mockito 2.0.2, Mockito-core ma zależności.
źródło
mockito 2.25.1
trzeba tylkoobjenesis-3.0.1.jar
ibyte-buddy-1.9.12.jar
.Miałem Byte Buddy na ścieżce klas (jest to przechodnia dep Mockito 2.8.9) i nadal mam wyjątek. Powodem dla mnie było to, że przeprowadziłem testy jednostkowe z JRE zamiast JDK. Przejście na JDK zadziałało dla mnie.
źródło
Miałem ten sam problem - ten sam ślad stosu pojawia się w moim logu. Zwykle jest to problem z konfiguracją projektu ... LUB
Problem może dotyczyć plików JAR bytebuddys, jeśli nie zostały one poprawnie pobrane.
Kiedy próbuję ręcznie sprawdzić klasę ClassLoadingStrategy, pojawia się błąd zip .
W takim przypadku wystarczy ręcznie usunąć Byte Buddy z lokalnego katalogu maven, zwykle znajdującego się pod adresem:
{home} /. M2 / repository / net / bytebuddy /
Przy następnej próbie uruchomienia projektu lub testu zostaną one pobrane ponownie i powinny działać zgodnie z oczekiwaniami.
Niestety, popularny program Java ClassLoader działa w ten sam sposób, gdy brakuje klasy lub pliku jar, a także plik jar jest uszkodzony.
źródło
net.bytebuddy*
jako zależność, więc zależności mogą być ze sobą w konflikcie.Ten problem z Mockito2 pojawia się, jeśli włączysz opcję mockowania klas końcowych.
W takim przypadku byte-buddy, który jest zależnością przechodnią dla mockito-core, ma problem z dołączeniem własnego agenta do procesu java. Ale problem występuje tylko wtedy, gdy używasz środowiska JRE.
Rozwiązaniem byłoby:
lub
-javaagent:byte-buddy-agent-*.jar
jako opcję maszyny wirtualnejźródło
Problem: PowerMock + Mockito + TestNG + PowerMockTestCase
Dzielenie się moim problemem / rozwiązaniem na wypadek, gdyby komuś pomogło.
Moje zależności zostały poprawnie wskazane:
testImplementation 'org.mockito:mockito-core:2.8.47' testImplementation 'org.powermock:powermock-core:1.7.4' testImplementation 'org.powermock:powermock-module-testng:1.7.4' testImplementation 'org.powermock:powermock-api-mockito2:1.7.4'
Ale nadal mam następujący błąd:
Mój test był taki:
import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockTestCase; import static org.mockito.MockitoAnnotations.initMocks; @PrepareForTest(MyClass.class) public class MyTest extends PowerMockTestCase { @BeforeTest public void init() { initMocks(this); } }
Jak wspomniano w tym wątku, usunięcie
initMocks()
metody usuwa błąd, ale wszystkie makiety stają się puste.✅ Rozwiązanie: BeforeTest VS BeforeMethod
W moim przypadku odkryłem, że
@BeforeTest
faktycznie stanowi problem. Zmiana w celu@BeforeMethod
rozwiązania problemu.import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockTestCase; import static org.mockito.MockitoAnnotations.initMocks; @PrepareForTest(MyClass.class) public class MyTest extends PowerMockTestCase { @BeforeMethod // CHANGE THIS! public void init() { initMocks(this); } }
Domyślam się, że ma to coś wspólnego z zastrzykiem fasoli;
@BeforeTest
jest wykonywany przed wstrzyknięciem jakichkolwiek ziaren, a@BeforeMethod
wykonywany po wstrzyknięciu ziaren. Nie jestem pewien, jak to naprawdę wpłynęło.źródło
W moim przypadku pracowałem nad projektem, który nie korzysta z systemu budowania Maven. Więc to działa dla mnie.
Uwaga: (tworzenie biblioteki jest opcjonalne, możesz dodać słoiki bezpośrednio do ścieżki budowania projektu)
Mam nadzieję, że to komuś pomoże.
źródło
Usuń ręcznie plik „byte-buddy-1.7.11.jar” ze ścieżki repozytorium maven, która pojawia się w błędzie. Maven zaktualizuje projekt, a problem zostanie rozwiązany. Próbował i pracował dla mnie.
źródło
Mockito 2 wymaga zależności. Dodanie poniżej dwóch zależności ByteBuddy. rozwiązał problem za mnie:
W moim przypadku dołączam do projektu pliki jar, które można znaleźć pod adresem : https://bintray.com/raphw/maven/ByteBuddy/
Jeśli potrzebujesz go do projektu Maven, po prostu dodaj:
źródło
Dla mnie problem polegał na tym, że IntelliJ przeprowadził test jako test integracji. Musiałem więc ręcznie stworzyć test JUnit
źródło
w moim przypadku jakieś nieprawidłowe ustawienie środowiska env również doprowadzi do tego błędu:
w Ubuntu 16.04, java i javac były alternatywami dla aktualizacji 7, ale $ JAVA_HOME zostało błędnie ustawione na 8
usunąłem $ JAVA_HOME i wszystko wróciło do normy
źródło
Dodanie do tego bnd aspektu
Dodając do odpowiedzi Paskasa , musisz również uwzględnić zależności w repozytorium cnf maven, jeśli używasz takiego (takiego jak moje
cnf/central.mvn
).a dla wygodnego odwoływania się możesz dołączyć zmienną bnd do swojego pliku
cnf/build.bnd
oraz w pliku bnd projektu
źródło
Miałem ten sam problem w jednym istniejącym projekcie. Użyłem java 8 i dodatkowo zainstalowałem java 10. Więc zacząłem otrzymywać ten wyjątek. Odinstalowałem java 10, to nie pomogło. Usunąłem słoiki bytebuddy z repozytorium maven, to nie pomogło. Dopiero po całkowitym usunięciu wszystkich słoików z repozytorium maven mogłem ponownie skompilować projekt.
źródło
Deklaracja usuwania wersji działa dla mnie:
Przykład:
usunąć 2.8.9
Po:
Może to być spowodowane problemem wersji między pakietami jar tej zależności.
źródło
Nie jest to odpowiedź na oryginalny plakat, ponieważ używa Netbeans, ale w Eclipse musiałem zrobić "Maven -> Update Project", aby testy znów działały.
źródło
Napotkałem ten problem i rozwiązałem go, wbijając moją wersję org.mockito.mockito-core do najnowszej wersji. Od dłuższego czasu korzystałem ze starszej wersji.
źródło
Rozwiązałem ten problem, usuwając jmockit w POM XML for Maven. Po tym moje testy Junit 5 działają idealnie.
Z tą zależnością zawsze otrzymuję błąd taki jak:
źródło
Wyraźnie zdefiniuj zależność mockito, ponieważ wersja w twoim powermock i springboot różni się testCompile: „org.mockito”, nazwa: „mockito-core”, wersja: „2.8.9”
źródło
Moja zależność dla mockito znajdowała się w ramach androidTestImplementation, a nie w testImplementation.
Wystąpił ten sam błąd, gdy próbowałem użyć mockito z moimi testami jednostkowymi. Wszystko, co musiałem zrobić, to dodać zależność.
źródło
W moim przypadku po usunięciu
mockito-core
test zadziałał!<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>${mockito.version}</version> <scope>test</scope> </dependency>
Moja wersja jest tutaj, a JDK to 1.8.0_121.
<properties> <powermock.version>2.0.7</powermock.version> <mockito.version>2.8.9</mockito.version> </properties>
Teraz moje zależności to:
źródło
W przypadku programowania na Androida musisz zaimportować kilka rzeczy:
nie mogłem znaleźć żadnego odniesienia do tego, ale jest to jedyne, które zadziałało dla mnie.
źródło
Zadziałało dla mnie po usunięciu folderu bytebuddy z $ {home} .m2 \ repository \ net \ bytebuddy i usunięciu zależności byte-buddy-agent, byte-buddy i objenesis z pom.xml
źródło
Mam ten sam błąd z rdzeniem mockito 3.6.0. Rozwiązałem to za pomocą tej instrukcji:
https://howtodoinjava.com/mockito/plugin-mockmaker-error/
źródło
Miałem ten sam wyjątek, kiedy przełączałem się na Javę 10 i Spring Boot 2. Ta kombinacja zależności zadziałała dla mnie:
źródło
Miałem ten sam problem i wypróbowałem rozwiązanie @ Paskas, działało dobrze Junit Test na początku był ok. dodał zależność bytebuddy do mojego pom.xml:
Mam nadzieję że to pomoże.
źródło
Po prostu zaktualizuj do najnowszej wersji
org.mockito:mockito-core
. Kiedy to zrobiłem, błędy zniknęły!źródło