Tidak dapat menginisialisasi plugin: interface org.mockito.plugins.MockMaker


94

Saya mendapatkan pengecualian berikut setelah tes dimulai:

    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)

Ini tes saya:

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

Saya menggunakan NetBeans 8.2. Saya sudah mendownload mockito-core-2.7.0.jar, lalu saya pilih "Test Libraries" -> "Add Jar" dan menambahkan mockito-core-2.7.0.jar.

Classpath dan semuanya tampak baik-baik saja, saya masih mendapatkan pengecualian.

Ada saran?



Mengupgrade ke versi Mockito yang lebih baru membantu saya mengatasi masalah ini.
Yogesh Patil

Mengosongkan cache Gradle dan mendownload semua dependensi dari awal telah memperbaikinya untuk saya. (Lihat: stackoverflow.com/a/13567793/4568679 untuk membersihkan cache)
Slav

Jawaban:


98

Jika Anda menggunakan powermock, pastikan dependensi Anda mengarah ke:

org.powermock:powermock-api-mockito2

dari pada

org.powermock:powermock-api-mockito

1
Saya belum tahu penyebab pastinya, tetapi jawaban ini membantu saya ketika pengujian saya gagal setelah meningkatkan versi Spring 1.5.14-RELEASE ke 2.0.4-RELEASE
Kenny

1
Pertanyaannya tidak ada hubungannya dengan powermock. Masalahnya terjadi saat Anda menggunakan jre, bukan jdk.
Łukasz Rzeszotarski

15
Saya tidak menggunakan PowerMock
IgorGanapolsky

48

Referensi hilang untuk:

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

Sejak Mockito 2.0.2 beta, Mockito-core memiliki ketergantungan.


7
perpustakaan tersebut disertakan secara default, ini bukan solusinya
Eduardo

Saya dapat mengonfirmasi bahwa menambahkan JAR byte-budy terbaru (dan lebih mungkin, byte-buddy-agent) ke dalam pengaturan mockito "terhebat terbaru" membantu di sini. Bagi saya, pengecualian dari pertanyaan muncul setelah mengaktifkan kelas "mengejek akhir" dengan mockito 2.
GhostCat

1
ini adalah dependensi transitif, Anda tidak perlu menambahkannya secara eksplisit.
Łukasz Rzeszotarski

Untuk mockito 2.25.1Anda hanya perlu objenesis-3.0.1.jardan byte-buddy-1.9.12.jar.
pengguna1485864

thease deps juga tercantum di halaman maven , di bagian bawah halaman. Termasuk itu menyelesaikan masalah.
Davide

13

Saya memiliki Byte Buddy di classpath (adalah dep transitif dari Mockito 2.8.9) dan masih mendapat pengecualian. Alasan bagi saya adalah saya menjalankan pengujian Unit dengan JRE, bukan JDK. Beralih ke JDK berhasil untuk saya.


1
Bagaimana Anda mengubah ini?
Taranmeet Singh

2
@TaranmeetSingh jika Anda menjalankan Android Studio, buka File> Project Structure> SDK location, dan periksa apakah jalur ke JDK Anda sudah benar. (Anda harus mengunduh JDK jika Anda belum melakukannya dari situs web Oracle.)
Lydia Ralph

Hai @LydiaRalph terima kasih atas sarannya sebenarnya saya punya masalah yang sama sekali berbeda. Saya sedang menulis kasus uji Unit untuk salah satu modul (yang juga merupakan proyek studio android mandiri) tetapi saya malah membuka seluruh proyek di studio android. Beralih ke proyek yang berdiri sendiri memecahkan masalah ini untuk saya.
Taranmeet Singh

@Stefano, cara beralih karena saya belum menyebutkan di mana menggunakan jdk atau jre
Tarun

Ini memperbaikinya untuk saya. Saya baru saja menghapus JRE dari Java Runtimes Eclipse, hanya menyisakan JDK.
Guillaume F.

6

Saya memiliki masalah yang sama - stacktrace yang sama muncul di log saya. Ini biasanya masalah dengan penyiapan proyek ... ATAU
Masalahnya bisa ada di JAR bytebuddys jika ini tidak diunduh dengan benar.
Ketika saya mencoba untuk memeriksa class ClassLoadingStrategy secara manual maka saya mendapatkan kesalahan zip .

Dalam hal ini, cukup hapus Byte Buddy secara manual dari direktori maven lokal, biasanya terletak di:
{home} /. M2 / repository / net / bytebuddy /

berikutnya untuk menjalankan proyek atau menguji mereka akan diunduh lagi dan seharusnya berfungsi seperti yang diharapkan.

Sayangnya, Java ClassLoader umum menghadapi cara yang sama ketika class atau jar hilang serta jar rusak.


Ada kemungkinan lain: Hibernate juga memiliki net.bytebuddy*ketergantungan, jadi mungkin ketergantungan tersebut bertentangan satu sama lain.
ruzenhack

5

Masalah dengan Mockito2 ini terjadi jika Anda mengaktifkan opsi untuk meniru kelas akhir.

Ini berarti ketika di direktori test / resources / mockito-extensions Anda memiliki file bernama org.mockito.plugins.MockMaker dengan konten mock-maker-inline berikut .

Dalam hal ini byte-buddy, yang merupakan dependensi transitif untuk mockito-core, memiliki masalah untuk melampirkan agennya sendiri ke proses java. Tapi masalahnya hanya terjadi saat Anda menggunakan JRE.

Solusinya adalah:

  • Gunakan JDK, bukan JRE

atau

  • tambahkan -javaagent:byte-buddy-agent-*.jarsebagai opsi VM

Di Android Studio, bagaimana Anda memeriksa apakah Anda menggunakan JRE, bukan JDK, dan bagaimana Anda akan mengubahnya?
sbearben

Saya memiliki masalah yang sama dengan Android Studio. Apakah ada yang berhasil?
Ajay Thomas

Berubah dari Embedded JRE ke JDK 14 & berhasil.
Abimanyu

3

Masalah: PowerMock + Mockito + TestNG + PowerMockTestCase

Berbagi masalah / solusi saya jika itu membantu siapa pun.

Semua dependensi saya ditunjukkan dengan benar:

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'

Tetapi saya masih mendapatkan kesalahan berikut:

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)

Tes saya adalah seperti itu:

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

Seperti yang disebutkan di utas ini, menghapus initMocks()metode akan menghapus kesalahan, tetapi semua tiruan menjadi null.


✅ Solusi: BeforeTest VS BeforeMethod

Apa yang saya temukan untuk kasus saya adalah bahwa @BeforeTestsebenarnya ada masalah. Mengubahnya untuk @BeforeMethodmenyelesaikan kesalahan.

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

Dugaan saya adalah bahwa ini ada hubungannya dengan injeksi kacang; @BeforeTestdieksekusi sebelum biji apa pun diinjeksi saat @BeforeMethoddieksekusi setelah biji injeksi. Tidak yakin bagaimana itu benar-benar terpengaruh.


1

Dalam kasus saya, saya sedang mengerjakan proyek yang tidak menggunakan sistem build maven. Jadi inilah yang berhasil untuk saya.

NB: (membuat perpustakaan bersifat opsional, Anda dapat menambahkan toples langsung ke jalur pembuatan proyek Anda)

Semoga ini bisa membantu seseorang.


1

Hapus "byte-buddy-1.7.11.jar" secara manual dari jalur repositori maven yang muncul dalam kesalahan. Maven memperbarui proyek dan masalah akan teratasi. Mencoba dan bekerja untukku.


1

Mockito 2 membutuhkan ketergantungan. Menambahkan dua dependensi ByteBuddy di bawah ini. memecahkan masalah untuk saya:

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

Dalam kasus saya, saya menyertakan file jar dalam proyek, yang dapat ditemukan di: https://bintray.com/raphw/maven/ByteBuddy/

Jika Anda membutuhkannya untuk proyek Maven, cukup tambahkan:

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

1

Bagi saya masalahnya adalah IntelliJ menjalankan tes tersebut sebagai tes integrasi. Jadi saya perlu membuat pengujian JUnit secara manual

masukkan deskripsi gambar di sini


0

dalam kasus saya, beberapa pengaturan env yang tidak normal juga akan menyebabkan kesalahan ini:

di ubuntu 16.04, java dan javac telah memperbarui alternatif ke 7 tetapi $ JAVA_HOME telah salah disetel ke 8

saya menghapus $ JAVA_HOME, dan semuanya kembali normal


0

Menambahkan aspek bnd untuk ini

Menambah jawaban Paskas , Anda juga harus memasukkan dependensi dalam repositori cnf maven, jika Anda menggunakan salah satu (seperti my 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

dan untuk referensi yang nyaman, Anda dapat menyertakan variabel bnd di file 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

dan di file bnd proyek Anda

-testpath:\
    ${mockito}

0

Saya memiliki masalah yang sama dalam satu proyek yang ada. Saya menggunakan java 8 dan juga menginstal java 10. Jadi saya mulai mendapatkan pengecualian ini. Saya menghapus java 10, itu tidak membantu. Saya menghapus botol bytebuddy dari repo maven, itu tidak membantu. Hanya setelah penghapusan semua toples dari repo maven saya dapat mengkompilasi proyek lagi.


0

Hapus deklarasi versi berfungsi untuk saya:

Contoh:

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

hapus 2.8.9

Setelah:

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

Ini mungkin karena masalah versi antara paket jar dari ketergantungan ini.


Anda pasti mewarisi versinya karena menghapusnya akan merusak proyek. Jawaban salah jadi salah.
eduyayo

0

Bukan jawaban untuk poster asli, karena dia menggunakan Netbeans, tetapi di Eclipse saya perlu melakukan "Maven -> Perbarui Proyek" agar tes dapat bekerja kembali.



0

Saya memecahkan masalah ini dengan menghapus jmockit di POM XML untuk Maven. Setelah itu tes Junit 5 saya bekerja dengan sempurna.

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

Dengan ketergantungan ini saya selalu mendapatkan error seperti:

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

Definisikan ketergantungan mockito secara eksplisit sebagai versi di powermock Anda dan springboot berbeda dengan grup testCompile: 'org.mockito', name: 'mockito-core', versi: '2.8.9'


0

Ketergantungan saya untuk mockito berada di bawah androidTestImplementation dan tidak di bawah testImplementation.

Saya mendapatkan kesalahan yang sama ketika saya mencoba menggunakan mockito dengan pengujian unit saya. Yang harus saya lakukan hanyalah menambahkan ketergantungan.


0

Dalam kasus saya, setelah melepas mockito-core, tes tersebut berhasil!

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

Versi saya ada di sini, dan JDK adalah 1.8.0_121.

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

Sekarang dependensi saya adalah:

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

-1

Saya memiliki pengecualian yang sama saat beralih ke Java 10 dan Spring Boot 2. Kombinasi ketergantungan ini berhasil untuk saya:

    <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

Saya memiliki masalah yang sama dan mencoba solusi @ Paskas, bekerja dengan baik Junit Test pada awalnya. menambahkan dependensi bytebuddy ke pom.xml saya:

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

Semoga ini membantu.


-2

Cukup perbarui ke rilis terbaru org.mockito:mockito-core. Setelah saya melakukannya, kesalahannya hilang!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.