all - mockito verify
No se pudo inicializar el complemento: interfaz org.mockito.plugins.MockMaker (18)
Recibo la siguiente excepción una vez que se inician las pruebas:
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)
Esta es mi prueba:
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);
}
}
Estoy usando NetBeans 8.2. Descargué mockito-core-2.7.0.jar, y luego seleccioné "Test Libraries" -> "Add Jar" y agregué mockito-core-2.7.0.jar.
Classpath y todo se ve bien, todavía estoy recibiendo una excepción.
¿Algún consejo?
Problema: PowerMock + Mockito + TestNG + PowerMockTestCase
Compartir mi problema / solución en caso de que ayude a alguien.
Mis dependencias fueron todas apuntadas correctamente:
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''
Pero todavía recibí el siguiente error:
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.$Proxy11.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:186)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:180)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)
at org.mockito.Mockito.mock(Mockito.java:1729)
at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:33)
at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:16)
at org.mockito.internal.configuration.IndependentAnnotationEngine.createMockFor(IndependentAnnotationEngine.java:38)
at org.mockito.internal.configuration.IndependentAnnotationEngine.process(IndependentAnnotationEngine.java:62)
at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:57)
at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:41)
at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:69)
Mi prueba fue algo así:
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);
}
}
Como se menciona en este hilo, eliminar el método
initMocks()
elimina el error, pero todos los simulacros se vuelven nulos.
✅ Solución: BeforeTest VS BeforeMethod
Lo que descubrí para mi caso es que
@BeforeTest
realmente estaba planteando un problema.
@BeforeMethod
a
@BeforeMethod
resolvió el error.
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);
}
}
Mi conjetura es que tiene algo que ver con la inyección de frijoles;
@BeforeTest
se ejecuta antes de que se inyecte cualquier
@BeforeMethod
mientras que
@BeforeMethod
se ejecuta después de la inyección de beans.
Sin embargo, no estoy seguro de cómo realmente afectó.
Eliminar la declaración de versión me funciona:
Ejemplo:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.8.9</version>
<scope>test</scope>
</dependency>
eliminar 2.8.9
Después:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
Puede deberse a un problema de versión entre los paquetes jar de esta dependencia.
Elimine el "byte-buddy-1.7.11.jar" manualmente de la ruta del repositorio maven que aparece en el error. Maven actualiza el proyecto y el problema se resolverá. Intenté y trabajé para mí.
En mi caso, estaba trabajando en un proyecto que no utiliza el sistema de construcción maven. Entonces esto es lo que funcionó para mí.
- Navegado al repositorio de Maven para mockito (utilizado v2.26): https://mvnrepository.com/artifact/org.mockito/mockito-core/2.26.0 . Descargué el tarro.
-
En la misma página en la parte inferior, busqué las dependencias.
Para mockito
2.26.0
, estas dependencias son:
- Byte Buddy v.1.9.10 ( https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy/1.9.10 )
- Byte Buddy Java Agent v1.9.10 ( https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy-agent/1.9.10 )
- Objenesis v2.6 ( https://mvnrepository.com/artifact/org.objenesis/objenesis/2.6 ) Descargué los archivos jar para las dependencias mockito anteriores En Eclipse creé una biblioteca de usuario que contenía los cuatro archivos jar y los agregué a mi proyecto.
NB: (la creación de la biblioteca es opcional, puede agregar los frascos directamente a la ruta de compilación del proyecto)
Espero que esto ayude a alguien.
Encontré este problema y lo resolví org.mockito.mockito-core mi versión de org.mockito.mockito-core en la última versión. Había estado usando una versión anterior durante bastante tiempo.
Este problema con Mockito2 ocurre si habilita la opción de burlarse de las clases finales.
Esto significa que en su directorio test / resources / mockito-extensions tiene el archivo llamado org.mockito.plugins.MockMaker con el siguiente contenido simulacro-maker-inline .
En ese caso, byte-buddy, que es una dependencia transitiva para mockito-core, tiene el problema de adjuntar un agente propio al proceso de Java. Pero el problema ocurre solo cuando usa JRE.
La solución sería:
- Use JDK en lugar de JRE
o
-
agregue
-javaagent:byte-buddy-agent-*.jar
como una opción de VM
Falta referencia a:
- byte-buddy-1.6.5.jar
- byte-buddy-agent-1.6.5.jar
- objenesis-2.5.jar
Desde Mockito 2.0.2 beta, Mockito-core tiene dependencias.
He tenido el mismo problema en un proyecto existente. Utilicé Java 8 e instalé Java 10. Además, comencé a obtener esta excepción. Desinstalé Java 10, no ha ayudado. Eliminé los frascos bytebuddy del repositorio de maven, no ha ayudado. Solo después de la eliminación completa de todos los frascos de Maven Repo pude compilar el proyecto nuevamente.
Mockito 2 requiere dependencias. Agregando las dos dependencias ByteBuddy a continuación. me resolvió el problema:
- byte-buddy-xxxx.jar
- byte-buddy-agent-xxxx.jar
En mi caso, incluyo archivos jar en el proyecto, que se pueden encontrar en: https://bintray.com/raphw/maven/ByteBuddy/
Si lo necesita para un proyecto Maven, simplemente agregue:
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.9.14</version>
<type>pom</type>
</dependency>
No es la respuesta al póster original, ya que está usando Netbeans, pero en Eclipse necesitaba hacer "Maven -> Actualizar proyecto" para que las pruebas funcionen nuevamente.
Si está utilizando powermock, asegúrese de que sus dependencias apunten a:
org.powermock:powermock-api-mockito2
en vez de
org.powermock:powermock-api-mockito
Simplemente actualice a la última versión de
org.mockito:mockito-core
.
Una vez que lo hice, ¡los errores desaparecieron!
Tenía Byte Buddy en classpath (es dep transitivo de Mockito 2.8.9) y todavía tengo la excepción. La razón para mí fue que ejecuté las pruebas de la Unidad con JRE en lugar de JDK. Cambiar a JDK funcionó para mí.
Tuve el mismo problema y probé la solución de @ Paskas, funcionó bien Junit Test ok al principio. agregué la dependencia bytebuddy a mi pom.xml:
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-dep</artifactId>
<version>1.9.7</version>
</dependency>
Espero que esto ayude.
Tuve el mismo problema: el mismo stacktrace aparece en mi registro.
Normalmente es un problema con la configuración del proyecto ... O
El problema puede estar en los JAR de bytebuddys si no se descargaron correctamente.
Cuando intento verificar la clase ClassLoadingStrategy manualmente, aparece un error
zip
.
En ese caso, es suficiente eliminar manualmente el Byte Buddy del directorio local de Maven, generalmente ubicado en:
{inicio} /. m2 / repositorio / net / bytebuddy /
El próximo intento de ejecutar un proyecto o prueba se descargarán nuevamente y deberían funcionar como se espera.
Desafortunadamente, Java ClassLoader común se enfrenta de la misma manera cuando faltan clases o jar, así como cuando el jar está dañado.
Tuve la misma excepción cuando cambié a Java 10 y Spring Boot 2. Esta combinación de dependencia funcionó para mí:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>2.0.2-beta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.8.16</version>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>1.8.16</version>
<scope>test</scope>
</dependency>
en mi caso, alguna configuración de entorno anormal también conducirá a este error:
en ubuntu 16.04, java y javac habían sido alternativas de actualización a 7 pero $ JAVA_HOME se había configurado incorrectamente a 8
elimino $ JAVA_HOME y todo vuelve a la normalidad
Agregar un aspecto bnd a esto
Agregando a
la respuesta de Paskas
, también debe incluir las dependencias en el repositorio cnf maven, si está usando una (como mi
cnf/central.mvn
).
org.mockito:mockito-core:2.21.0
net.bytebuddy:byte-buddy:1.8.15
net.bytebuddy:byte-buddy-agent:1.8.15
org.objenesis:objenesis:2.6
y para una referencia conveniente, puede incluir una variable bnd en su
cnf/build.bnd
mockito: org.mockito:mockito-core; version=2.21.0,/
net.bytebuddy:byte-buddy; version=1.8.15,/
net.bytebuddy:byte-buddy-agent; version=1.8.15,/
org.objenesis:objenesis; version=2.6
y en el archivo bnd de tu proyecto
-testpath:/
${mockito}