Não foi possível inicializar o plugin: interface org.mockito.plugins.MockMaker


99

Estou recebendo a seguinte exceção quando os testes são iniciados:

    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)

Este é o meu teste:

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);
        }
    }

Estou usando o NetBeans 8.2. Baixei mockito-core-2.7.0.jar, selecionei "Test Libraries" -> "Add Jar" e adicionei mockito-core-2.7.0.jar.

Classpath e tudo parece ok, ainda estou recebendo exceção.

Algum conselho?


1
Verifique a solução em stackoverflow.com/a/41964561/4903889
AskQ

Atualizar para uma versão mais recente do Mockito me ajudou a resolver esse problema.
Yogesh Patil

Limpar o cache do Gradle e baixar todas as dependências do zero corrigiu isso para mim. (Consulte: stackoverflow.com/a/13567793/4568679 para limpar o cache)
Eslavo

Respostas:


100

Se você estiver usando o powermock, certifique-se de que suas dependências apontem para:

org.powermock:powermock-api-mockito2

ao invés de

org.powermock:powermock-api-mockito

1
Não sei a causa exata ainda, mas esta resposta me ajudou quando meus testes falharam após atualizar a versão 1.5.14-RELEASE do Spring para 2.0.4-RELEASE
Kenny

1
A questão não tem nada a ver com powermock. O problema ocorre quando você usa jre em vez de jdk.
Łukasz Rzeszotarski

18
Não estou usando PowerMock
IgorGanapolsky

E se você não estiver usando o PowerMock? A pergunta fez referência à interface org.mockito.plugins.MockMaker.
portfólio de

49

Falta referência a:

  • byte-buddy-1.6.5.jar
  • byte-buddy-agent-1.6.5.jar
  • objenesis-2.5.jar

Desde o Mockito 2.0.2 beta, o Mockito-core tem dependências.


7
essas bibliotecas são incluídas por padrão, esta não é a solução
Eduardo

Posso confirmar que adicionar o último byte-budy (e mais provavelmente, o byte-buddy-agent) JARs a uma configuração de mockito "mais recente" ajuda aqui. Para mim, a exceção da pergunta apareceu depois de ativar as classes "mocking of final" com o mockito 2.
GhostCat

1
essas são dependências transitivas e você não precisa adicioná-las explicitamente.
Łukasz Rzeszotarski

Para mockito 2.25.1você só precisa objenesis-3.0.1.jare byte-buddy-1.9.12.jar.
user1485864

1
as dependências da locação também estão listadas na página do maven , no final da página. Incluí-lo resolve o problema.
Davide

15

Eu tinha o Byte Buddy no classpath (é um dep transitivo do Mockito 2.8.9) e ainda assim recebi a exceção. O motivo para mim foi que executei os testes de unidade com JRE em vez de JDK. Mudar para o JDK funcionou para mim.


1
Como você mudou isso?
Taranmeet Singh

2
@TaranmeetSingh se você estiver executando com o Android Studio, vá para Arquivo> Estrutura do projeto> Local do SDK e verifique se os caminhos para o JDK estão corretos. (Você precisará baixar um JDK se ainda não o fez no site da Oracle.)
Lydia Ralph

Olá @LydiaRalph, obrigado pela sugestão, na verdade eu tive um problema totalmente diferente. Eu estava escrevendo casos de teste de unidade para um dos módulos (que também são projetos independentes do Android Studio), mas, em vez disso, abri todo o projeto no Android Studio. Mudar para o projeto autônomo resolveu isso para mim.
Taranmeet Singh

@Stefano, como mudar, já que não mencionei nenhum em que usar jdk ou jre
Tarun

Isso consertou para mim. Acabei de remover o JRE do Java Runtimes do Eclipse, deixando apenas o JDK.
Guillaume F.

6

Eu tive o mesmo problema - o mesmo rastreamento de pilha aparece em meu log. Normalmente é um problema com a configuração do projeto ... OU
O problema pode estar nos JARs do bytebuddys se eles não foram baixados corretamente.
Quando tento verificar a classe ClassLoadingStrategy manualmente, recebo um erro de zip .

Nesse caso, basta excluir manualmente o Byte Buddy do diretório maven local, geralmente localizado em:
{home} /. M2 / repository / net / bytebuddy /

Na próxima tentativa de executar o projeto ou teste, eles serão baixados novamente e devem funcionar como esperado.

Infelizmente, o Java ClassLoader comum enfrenta da mesma forma quando a classe ou o jar faltando, assim como o jar, está corrompido.


Existe outra possibilidade: o Hibernate também tem net.bytebuddy*como uma dependência, então as dependências podem estar em conflito umas com as outras.
ruzenhack de

6

Este problema com o Mockito2 ocorre se você habilitar a opção de simular as aulas finais.

Isso significa que quando em seu diretório test / resources / mockito-extensions você tem o arquivo chamado org.mockito.plugins.MockMaker com o seguinte conteúdo mock-maker-inline .

Nesse caso, o byte-buddy, que é uma dependência transitiva do mockito-core, tem o problema de anexar o próprio agente ao processo java. Mas o problema ocorre apenas quando você usa o JRE.

A solução seria:

  • Use JDK em vez de JRE

ou

  • adicionar -javaagent:byte-buddy-agent-*.jarcomo uma opção de VM

No Android Studio, como você verifica se está usando JRE em vez de JDK e como você alteraria isso?
sbearben

Tenho o mesmo problema com o Android Studio. Alguém teve sucesso?
Ajay Thomas de

3

Problema: PowerMock + Mockito + TestNG + PowerMockTestCase

Compartilhando meu problema / solução caso ajude alguém.

Minhas dependências foram todas apontadas corretamente:

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'

Mas ainda recebo o seguinte erro:

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)

Meu teste foi algo assim:

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);
    }
}

Conforme mencionado neste tópico, remover o initMocks()método remove o erro, mas todos os simulados se tornam nulos.


✅ Solução: BeforeTest VS BeforeMethod

O que descobri para o meu caso é que isso @BeforeTestestava na verdade sendo um problema. Alterá-lo para @BeforeMethodresolver o erro.

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);
    }
}

Meu palpite é que tem a ver com injeção de feijão; @BeforeTesté executado antes de qualquer bean ser injetado, enquanto @BeforeMethodé executado após a injeção de beans. Não tenho certeza de como isso realmente afetou.


Você tem uma solução sem powermock?
portfólio

@portfoliobuilder se você não estiver usando o powermock, não acho que encontrará o mesmo problema que eu enfrentei. Provavelmente você poderia verificar as outras sugestões fornecidas neste tópico? Certifique-se de que o mockito esteja atualizado, que você esteja usando jdk e não tenha as referências ausentes.
Ely

1

No meu caso, eu estava trabalhando em um projeto que não usa o sistema de compilação maven. Então foi isso que funcionou para mim.

NB: (criar a biblioteca é opcional, você pode adicionar os jars diretamente ao caminho de construção do seu projeto)

Espero que isso ajude alguém.


1

Exclua o "byte-buddy-1.7.11.jar" manualmente do caminho do repositório maven que aparece no erro. O Maven atualiza o projeto e o problema será resolvido. Tentei e funcionou para mim.


1

O Mockito 2 requer dependências. Adicionando as duas dependências ByteBuddy abaixo. resolveu o problema para mim:

  • byte-buddy-xxxx.jar
  • byte-buddy-agent-xxxx.jar

No meu caso, incluo arquivos jar no projeto, que podem ser encontrados em: https://bintray.com/raphw/maven/ByteBuddy/

Se você precisar dele para um projeto Maven, basta adicionar:

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

1

Para mim, o problema era que o IntelliJ executou o teste como um teste de integração. Então, eu precisava criar o teste JUnit manualmente

insira a descrição da imagem aqui


Talvez você tenha este teste de unidade no diretório androidTest? Presumo que o AS espera ter testes instrumentados em 'androidTest' e testes de unidade em 'test'.
Kikiwa de

0

no meu caso, alguma configuração de env anormal também levará a este erro:

no ubuntu 16.04, java e javac eram alternativas de atualização para 7, mas $ JAVA_HOME foi definido incorretamente para 8

eu removo o $ JAVA_HOME e tudo volta ao normal


0

Adicionando um aspecto bnd a este

Adicionando a resposta de Paskas , você também tem que incluir as dependências no repositório cnf maven, se você estiver usando um (como o meu 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

e para referência conveniente, você pode incluir uma variável bnd em seu 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

e no arquivo bnd do seu projeto

-testpath:\
    ${mockito}

0

Eu tive o mesmo problema em um projeto existente. Usei o java 8 e instalei adicionalmente o java 10. Portanto, comecei a obter essa exceção. Desinstalei o java 10, não ajudou. Excluí jars bytebuddy do repositório maven, isso não ajudou. Somente após a remoção completa de todos os jars do repositório maven, eu pude compilar o projeto novamente.


0

Remover declaração de versão funciona para mim:

Exemplo:

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.8.9</version>
        <scope>test</scope>
    </dependency>

remover 2.8.9

Depois de:

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <scope>test</scope>
    </dependency>

Pode ser devido a um problema de versão entre os pacotes jar desta dependência.


você certamente está herdando a versão porque removê-la interromperá o projeto. Resposta errada, tão errada.
eduyayo

0

Não é a resposta para o autor da postagem original, já que ele / ela está usando o Netbeans, mas no Eclipse eu precisei fazer "Maven -> Atualizar Projeto" para fazer os testes funcionarem novamente.



0

Resolvi esse problema removendo jmockit no POM XML para Maven. Depois disso, meus testes do Junit 5 funcionam perfeitamente.

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

Com essa dependência, sempre recebo um erro 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
...

0

Defina explicitamente a dependência do mockito como a versão em seu powermock e springboot difere do grupo testCompile: 'org.mockito', nome: 'mockito-core', versão: '2.8.9'


0

Minha dependência para mockito estava em androidTestImplementation e não em testImplementation.

Recebi o mesmo erro quando tentei usar o mockito com meus testes de unidade. Tudo que eu tive que fazer foi adicionar a dependência.


0

No meu caso, após a retirada mockito-core, o teste funcionou!

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

Minha versão está aqui e o JDK é 1.8.0_121.

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

Agora minhas dependências são:

  • powermock-api-mockito2
  • powermock-module-junit4

0

Para o desenvolvimento do Android, você precisa importar algumas coisas:

 dependencies {
   testCompile "org.mockito:mockito-core:+"
   androidTestCompile "org.mockito:mockito-android:+"
 }

não consegui encontrar nenhuma referência disso, mas este é o único que funcionou para mim.


0

Funcionou para mim depois de remover a pasta bytebuddy de $ {home} .m2 \ repository \ net \ bytebuddy e remover byte-buddy-agent, byte-buddy e dependência de objenesis de pom.xml



-1

Tive a mesma exceção ao mudar para Java 10 e Spring Boot 2. Esta combinação de dependências funcionou para mim:

    <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>

-1

Eu tive o mesmo problema e tentei a solução de @Paskas, funcionou bem o Junit Test ok no início. adicionei a dependência bytebuddy ao meu pom.xml:

<dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy-dep</artifactId>
            <version>1.9.7</version>
</dependency>

Espero que isto ajude.


-3

Basta atualizar para a versão mais recente do org.mockito:mockito-core. Assim que o fiz, os erros desapareceram!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.