No se pudo inicializar el complemento: interfaz org.mockito.plugins.MockMaker

94

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é "Probar bibliotecas" -> "Agregar Jar" y agregué mockito-core-2.7.0.jar.

Classpath y todo se ve bien, todavía tengo una excepción.

¿Algún consejo?

Paskas
fuente
1
Verifique la solución en stackoverflow.com/a/41964561/4903889
AskQ
Actualizar a una versión más nueva de Mockito me ayudó a resolver este problema.
Yogesh Patil
Limpiar la caché de Gradle y descargar todas las dependencias desde cero me lo arregló. (Ver: stackoverflow.com/a/13567793/4568679 para borrar el caché)
Slav

Respuestas:

98

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
Addev
fuente
1
Todavía no sé la causa exacta, pero esta respuesta me ayudó cuando mis pruebas fallaron después de actualizar Spring versión 1.5.14-RELEASE a 2.0.4-RELEASE
Kenny
1
La pregunta no tiene nada que ver con powermock. El problema ocurre cuando usa jre en lugar de jdk.
Łukasz Rzeszotarski
15
No estoy usando PowerMock
IgorGanapolsky
48

Falta una 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.

Paskas
fuente
7
esas bibliotecas están incluidas por defecto, esta no es la solución
Eduardo
Puedo confirmar que agregar el último JAR de byte-budy (y más probablemente, el byte-buddy-agent) a un "último y grandioso" ayuda para la configuración de mockito aquí. Para mí, la excepción de la pregunta apareció después de habilitar las clases de "burlarse de la final" con mockito 2.
GhostCat
1
Estas son dependencias transitivas, no es necesario que las agregue explícitamente.
Łukasz Rzeszotarski
Porque mockito 2.25.1solo necesitas objenesis-3.0.1.jary byte-buddy-1.9.12.jar.
user1485864
los deps de thease también se enumeran en la página de maven , en la parte inferior de la página. Incluirlo resuelve el problema.
Davide
13

Tenía Byte Buddy en classpath (es un depósito transitivo de Mockito 2.8.9) y todavía tengo la excepción. La razón para mí fue que ejecuté las pruebas unitarias con JRE en lugar de JDK. Cambiar a JDK funcionó para mí.

Stefano L
fuente
1
¿Cómo cambiaste esto?
Taranmeet Singh
2
@TaranmeetSingh si está ejecutando con Android Studio, vaya a Archivo> Estructura del proyecto> Ubicación del SDK y verifique que las rutas a su JDK sean correctas. (Deberá descargar un JDK si aún no lo ha hecho del sitio web de Oracle).
Lydia Ralph
Hola @LydiaRalph, gracias por la sugerencia, en realidad tuve un problema completamente diferente. Estaba escribiendo casos de prueba de unidad para uno de los módulos (que también son proyectos de estudio de Android independientes) pero en su lugar había abierto todo el proyecto en el estudio de Android. Cambiar al proyecto independiente resolvió esto por mí.
Taranmeet Singh
@Stefano, cómo cambiar, ya que no mencioné dónde usar jdk o jre
Tarun
Esto me lo arregló. Acabo de eliminar el JRE de Java Runtimes de Eclipse, dejando solo el JDK.
Guillaume F.
6

Tuve el mismo problema: el mismo seguimiento de pila aparece en mi registro. Normalmente es un problema con la configuración del proyecto ... O
El problema puede estar en los archivos JAR de bytebuddys si no se descargaron correctamente.
Cuando intento verificar la clase ClassLoadingStrategy manualmente, aparece un error de zip .

En ese caso, es suficiente eliminar manualmente el Byte Buddy del directorio local de maven, generalmente ubicado en:
{home} /. M2 / repository / net / bytebuddy /

El próximo intento de ejecutar el proyecto o la prueba se descargarán nuevamente y deberían funcionar como se esperaba.

Desafortunadamente, el Java ClassLoader común se enfrenta de la misma manera cuando falta la clase o el jar y el jar está dañado.

vdou
fuente
Existe otra posibilidad: Hibernate también tiene net.bytebuddy*como dependencia, por lo que las dependencias pueden estar en conflicto entre sí.
ruzenhack
5

Este problema con Mockito2 ocurre si habilitas la opción de simular clases finales.

Esto significa que cuando en su directorio test / resources / mockito-extensions tiene el archivo llamado org.mockito.plugins.MockMaker con el siguiente contenido mock-maker-inline .

En ese caso, byte-buddy, que es una dependencia transitiva para mockito-core, tiene el problema de adjuntar su propio agente al proceso java. Pero el problema ocurre solo cuando usa JRE.

La solución sería:

  • Utilice JDK en lugar de JRE

o

  • agregar -javaagent:byte-buddy-agent-*.jarcomo una opción de VM
Łukasz Rzeszotarski
fuente
En Android Studio, ¿cómo comprueba si está utilizando JRE en lugar de JDK y cómo lo cambiaría?
sbearben
Tengo el mismo problema con Android Studio. ¿Alguien tuvo éxito?
Ajay Thomas
Se cambió de Embedded JRE a JDK 14 y funcionó.
Abhimanyu
3

Problema: PowerMock + Mockito + TestNG + PowerMockTestCase

Compartiendo mi problema / solución en caso de que ayude a alguien.

Todas mis dependencias se señalaron 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 tengo 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 como tal:

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 initMocks()método elimina el error, pero todas las simulaciones se vuelven nulas.


✅ Solución: BeforeTest VS BeforeMethod

Lo que descubrí para mi caso es que en @BeforeTestrealidad estaba planteando un problema. Cambiarlo para @BeforeMethodresolver 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);
    }
}

Supongo que tiene algo que ver con la inyección de frijoles; @BeforeTestse ejecuta antes de que se inyecten los beans mientras que @BeforeMethodse ejecuta después de la inyección de beans. Sin embargo, no estoy seguro de cómo afectó realmente.

Ely
fuente
1

En mi caso, estaba trabajando en un proyecto que no usa el sistema de compilación maven. Entonces esto es lo que funcionó para mí.

NB: (la creación de la biblioteca es opcional, puede agregar los frascos directamente a la ruta de construcción de su proyecto)

Espero que esto ayude a alguien.

Kelli
fuente
1

Elimine "byte-buddy-1.7.11.jar" manualmente de la ruta del repositorio de maven que aparece en el error. Maven actualiza el proyecto y el problema se resolverá. Intenté y funcionó para mí.

Arjun
fuente
1

Mockito 2 requiere dependencias. Añadiendo las dos dependencias ByteBuddy a continuación. resolvió el problema para mí:

  • 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 de Maven, simplemente agregue:

<dependency>
  <groupId>net.bytebuddy</groupId>
  <artifactId>byte-buddy</artifactId>
  <version>1.9.14</version>
  <type>pom</type>
</dependency>
Vargha Hokmran
fuente
1

Para mí, el problema fue que IntelliJ ejecutó la prueba como prueba de integración. Entonces necesitaba crear la prueba JUnit manualmente

ingrese la descripción de la imagen aquí

tonificantes
fuente
0

en mi caso, alguna configuración de env 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 en 8

elimino $ JAVA_HOME y todo vuelve a la normalidad

cfz
fuente
0

Añadiendo un aspecto bnd a esto

Además de la respuesta de Paskas , también debe incluir las dependencias en el repositorio de cnf maven, si está usando uno (como el mío 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 su proyecto

-testpath:\
    ${mockito}
Zymus
fuente
0

He tenido el mismo problema en un proyecto existente. Usé Java 8 y, además, instalé Java 10. Así que comencé a obtener esta excepción. Desinstalé Java 10, no ha ayudado. Eliminé los frascos de bytebuddy del repositorio de maven, no ha ayudado. Solo después de la eliminación completa de todos los frascos del repositorio de maven, pude compilar el proyecto nuevamente.

romano
fuente
0

Eliminar la declaración de versión funciona para mí:

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.

Hai Huang
fuente
seguramente está heredando la versión porque eliminarla romperá el proyecto. Respuesta incorrecta tan incorrecta.
eduyayo
0

No es la respuesta al póster original, ya que usa Netbeans, pero en Eclipse necesitaba hacer "Maven -> Actualizar proyecto" para que las pruebas funcionen nuevamente.

Brimstedt
fuente
0

Encontré este problema y lo resolví mejorando mi versión de org.mockito.mockito-core a la última versión. Había estado usando una versión anterior durante bastante tiempo.

Adil B
fuente
0

Resolví este problema eliminando jmockit en POM XML para Maven. Después de eso, mis pruebas de Junit 5 funcionan perfectamente.

    <dependency>
        <groupId>org.jmockit</groupId>
        <artifactId>jmockit</artifactId>
        <version>1.41</version>
        <scope>test</scope>
    </dependency>

Con esta dependencia siempre obtengo un error como:

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
...

Could not initialize inline Byte Buddy mock maker. (This mock maker is not supported on Android.)
...

Caused by: com.sun.tools.attach.AttachNotSupportedException: no providers installed
...
Guchelkaben
fuente
0

Defina explícitamente la dependencia de mockito como la versión en su powermock y springboot difiere del grupo testCompile: 'org.mockito', nombre: 'mockito-core', versión: '2.8.9'

Ayu
fuente
0

Mi dependencia de mockito estaba bajo androidTestImplementation y no bajo testImplementation.

Recibí el mismo error cuando intenté usar mockito con mis pruebas unitarias. Todo lo que tenía que hacer era agregar la dependencia.

lukas hansen
fuente
0

En mi caso, después de quitarlo mockito-core, ¡la prueba funcionó!

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>${mockito.version}</version>
    <scope>test</scope>
</dependency>

Mi versión está aquí y JDK es 1.8.0_121.

<properties>
    <powermock.version>2.0.7</powermock.version>
    <mockito.version>2.8.9</mockito.version>
</properties>

Ahora mis dependencias son:

  • powermock-api-mockito2
  • módulo-powermock-junit4
kyakya
fuente
-1

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>
Svitlana Onish
fuente
-1

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.

Youssef Kesbaoui
fuente
-2

Simplemente actualice a la última versión de org.mockito:mockito-core. Una vez que lo hice, ¡los errores desaparecieron!

Huw Davies
fuente