Nach dem Start der Tests wird folgende Ausnahme angezeigt:
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)
Das ist mein 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);
}
}
Ich verwende NetBeans 8.2. Ich habe mockito-core-2.7.0.jar heruntergeladen und dann "Test Libraries" -> "Add Jar" ausgewählt und mockito-core-2.7.0.jar hinzugefügt.
Klassenpfad und alles sieht in Ordnung aus, ich bekomme immer noch eine Ausnahme.
Irgendein Rat?
Antworten:
Wenn Sie Powermock verwenden, stellen Sie sicher, dass Ihre Abhängigkeiten auf Folgendes verweisen:
anstatt
quelle
Fehlender Hinweis auf:
Seit Mockito 2.0.2 Beta hat Mockito-Core Abhängigkeiten.
quelle
mockito 2.25.1
Sie brauchen nurobjenesis-3.0.1.jar
undbyte-buddy-1.9.12.jar
.Ich hatte Byte Buddy auf dem Klassenpfad (ist eine transitive Dep von Mockito 2.8.9) und bekam immer noch die Ausnahme. Grund für mich war, dass ich die Unit-Tests mit JRE anstelle von JDK durchgeführt habe. Der Wechsel zu JDK hat bei mir funktioniert.
quelle
Ich hatte das gleiche Problem - der gleiche Stacktrace wird in meinem Protokoll angezeigt. Es ist normalerweise ein Problem mit der Projekteinrichtung ... ODER
Das Problem kann in den Bytebuddys-JARs liegen, wenn diese nicht korrekt heruntergeladen wurden.
Wenn ich versuche, die Klasse ClassLoadingStrategy manuell zu überprüfen, wird ein Zip- Fehler angezeigt .
In diesem Fall reicht es gerade aus, den Byte Buddy manuell aus dem lokalen Maven-Verzeichnis zu löschen, das sich normalerweise unter folgender Adresse befindet:
{home} /. M2 / repository / net / bytebuddy / Beim
nächsten Versuch, ein Projekt auszuführen oder zu testen, werden sie erneut heruntergeladen und sollten funktionieren wie erwartet.
Leider sieht der häufig vorkommende Java ClassLoader genauso aus, wenn die fehlende Klasse oder das fehlende JAR sowie das JAR beschädigt sind.
quelle
net.bytebuddy*
eine Abhängigkeit, daher können die Abhängigkeiten in Konflikt miteinander stehen.Dieses Problem mit Mockito2 tritt auf, wenn Sie die Option zum Verspotten von Abschlussklassen aktivieren.
In diesem Fall hat Byte-Buddy, eine transitive Abhängigkeit für Mockito-Core, das Problem, einen eigenen Agenten an den Java-Prozess anzuhängen. Das Problem tritt jedoch nur auf, wenn Sie JRE verwenden.
Die Lösung wäre entweder:
oder
-javaagent:byte-buddy-agent-*.jar
als VM-Option hinzufügenquelle
Problem: PowerMock + Mockito + TestNG + PowerMockTestCase
Teilen Sie mein Problem / meine Lösung, falls es jemandem hilft.
Meine Abhängigkeiten waren alle richtig angegeben:
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'
Aber ich habe immer noch den folgenden Fehler bekommen:
Mein Test war so etwas wie:
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); } }
Wie in diesem Thread erwähnt, wird durch Entfernen der
initMocks()
Methode der Fehler behoben, aber alle Mocks werden null.✅ Lösung: BeforeTest VS BeforeMethod
Was ich für meinen Fall herausgefunden habe, ist, dass dies
@BeforeTest
tatsächlich ein Problem darstellt. Ändern Sie es,@BeforeMethod
um den Fehler zu beheben.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); } }
Ich vermute, dass es etwas mit der Injektion von Bohnen zu tun hat.
@BeforeTest
wird ausgeführt, bevor Bohnen injiziert wurden, während@BeforeMethod
es nach der Injektion von Bohnen ausgeführt wird. Ich bin mir nicht sicher, wie es sich wirklich ausgewirkt hat.quelle
In meinem Fall habe ich an einem Projekt gearbeitet, das das Maven-Build-System nicht verwendet. Das hat also bei mir funktioniert.
NB: (Das Erstellen der Bibliothek ist optional. Sie können die Jars direkt zu Ihrem Projekterstellungspfad hinzufügen.)
Hoffe das hilft jemandem.
quelle
Löschen Sie das "byte-buddy-1.7.11.jar" manuell aus dem Maven-Repository-Pfad, der im Fehler angezeigt wird. Maven aktualisiert das Projekt und das Problem wird behoben. Versuchte und arbeitete für mich.
quelle
Mockito 2 erfordert Abhängigkeiten. Hinzufügen der beiden folgenden ByteBuddy-Abhängigkeiten. löste das Problem für mich:
In meinem Fall füge ich JAR-Dateien in das Projekt ein, die unter folgender Adresse zu finden sind: https://bintray.com/raphw/maven/ByteBuddy/
Wenn Sie es für ein Maven-Projekt benötigen, fügen Sie einfach Folgendes hinzu:
quelle
Für mich war das Problem, dass IntelliJ den Test als Integrationstest durchführte. Also musste ich den JUnit-Test manuell erstellen
quelle
In meinem Fall führt auch eine abnormale Umgebungseinstellung zu diesem Fehler:
In Ubuntu 16.04 waren Java und Javac Update-Alternativen zu 7, aber $ JAVA_HOME wurde fälschlicherweise auf 8 gesetzt
Ich entferne das $ JAVA_HOME und alles wieder normal
quelle
Hinzufügen eines bnd Aspekts dazu
Wenn Sie die Antwort von Paskas ergänzen, müssen Sie auch die Abhängigkeiten in das cnf maven-Repository aufnehmen, wenn Sie eine verwenden (wie meine
cnf/central.mvn
).und für eine bequeme Referenzierung können Sie eine bnd-Variable in Ihre aufnehmen
cnf/build.bnd
und in der bnd-Datei Ihres Projekts
quelle
Ich hatte das gleiche Problem in einem bestehenden Projekt. Ich habe Java 8 verwendet und zusätzlich Java 10 installiert. Also habe ich angefangen, diese Ausnahme zu bekommen. Ich habe Java 10 deinstalliert, es hat nicht geholfen. Ich habe Bytebuddy-Gläser aus Maven Repo gelöscht, es hat nicht geholfen. Erst nach dem vollständigen Entfernen aller Gläser aus dem Maven Repo konnte ich das Projekt erneut kompilieren.
quelle
Versionserklärung entfernen funktioniert bei mir:
Beispiel:
2.8.9 entfernen
Nach:
Dies kann auf ein Versionsproblem zwischen JAR-Paketen dieser Abhängigkeit zurückzuführen sein.
quelle
Nicht die Antwort auf das Originalposter, da er / sie Netbeans verwendet, aber in Eclipse musste ich "Maven -> Projekt aktualisieren" ausführen, damit die Tests wieder funktionieren.
quelle
Ich bin auf dieses Problem gestoßen und habe es gelöst, indem ich meine Version von org.mockito.mockito-core auf die neueste Version gebracht habe. Ich hatte schon seit einiger Zeit eine ältere Version verwendet.
quelle
Ich habe dieses Problem gelöst, indem ich jmockit in POM XML für Maven entfernt habe. Danach funktionieren meine Junit 5-Tests einwandfrei.
Mit dieser Abhängigkeit erhalte ich immer einen Fehler wie:
quelle
Definieren Sie die Mockito-Abhängigkeit explizit, da sich die Version in Ihrem Powermock und Springboot von der testCompile-Gruppe unterscheidet: 'org.mockito', Name: 'mockito-core', Version: '2.8.9'
quelle
Meine Abhängigkeit für mockito war unter androidTestImplementation und nicht unter testImplementation.
Ich habe den gleichen Fehler erhalten, als ich versucht habe, Mockito für meine Unit-Tests zu verwenden. Ich musste nur die Abhängigkeit hinzufügen.
quelle
In meinem Fall
mockito-core
hat der Test nach dem Entfernen funktioniert!<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>${mockito.version}</version> <scope>test</scope> </dependency>
Meine Version ist hier und JDK ist 1.8.0_121.
<properties> <powermock.version>2.0.7</powermock.version> <mockito.version>2.8.9</mockito.version> </properties>
Jetzt sind meine Abhängigkeiten:
quelle
Ich hatte die gleiche Ausnahme beim Wechsel zu Java 10 und Spring Boot 2. Diese Abhängigkeitskombination funktionierte für mich:
quelle
Ich hatte das gleiche Problem und habe die Lösung von @ Paskas ausprobiert. Junit Test hat zunächst gut funktioniert. hat die bytebuddy-Abhängigkeit zu meiner pom.xml hinzugefügt:
Hoffe das hilft.
quelle
Aktualisieren Sie einfach auf die neueste Version von
org.mockito:mockito-core
. Sobald ich das tat, verschwanden die Fehler!quelle