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?
Jawaban:
Jika Anda menggunakan powermock, pastikan dependensi Anda mengarah ke:
dari pada
sumber
Referensi hilang untuk:
Sejak Mockito 2.0.2 beta, Mockito-core memiliki ketergantungan.
sumber
mockito 2.25.1
Anda hanya perluobjenesis-3.0.1.jar
danbyte-buddy-1.9.12.jar
.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.
sumber
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.
sumber
net.bytebuddy*
ketergantungan, jadi mungkin ketergantungan tersebut bertentangan satu sama lain.Masalah dengan Mockito2 ini terjadi jika Anda mengaktifkan opsi untuk meniru kelas akhir.
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:
atau
-javaagent:byte-buddy-agent-*.jar
sebagai opsi VMsumber
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:
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
@BeforeTest
sebenarnya ada masalah. Mengubahnya untuk@BeforeMethod
menyelesaikan 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;
@BeforeTest
dieksekusi sebelum biji apa pun diinjeksi saat@BeforeMethod
dieksekusi setelah biji injeksi. Tidak yakin bagaimana itu benar-benar terpengaruh.sumber
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.
sumber
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.
sumber
Mockito 2 membutuhkan ketergantungan. Menambahkan dua dependensi ByteBuddy di bawah ini. memecahkan masalah untuk saya:
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:
sumber
Bagi saya masalahnya adalah IntelliJ menjalankan tes tersebut sebagai tes integrasi. Jadi saya perlu membuat pengujian JUnit secara manual
sumber
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
sumber
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
).dan untuk referensi yang nyaman, Anda dapat menyertakan variabel bnd di file
cnf/build.bnd
dan di file bnd proyek Anda
sumber
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.
sumber
Hapus deklarasi versi berfungsi untuk saya:
Contoh:
hapus 2.8.9
Setelah:
Ini mungkin karena masalah versi antara paket jar dari ketergantungan ini.
sumber
Bukan jawaban untuk poster asli, karena dia menggunakan Netbeans, tetapi di Eclipse saya perlu melakukan "Maven -> Perbarui Proyek" agar tes dapat bekerja kembali.
sumber
Saya mengalami masalah ini dan menyelesaikannya dengan menaikkan versi org.mockito.mockito-core saya ke rilis terbaru. Saya telah menggunakan rilis yang lebih lama untuk beberapa waktu.
sumber
Saya memecahkan masalah ini dengan menghapus jmockit di POM XML untuk Maven. Setelah itu tes Junit 5 saya bekerja dengan sempurna.
Dengan ketergantungan ini saya selalu mendapatkan error seperti:
sumber
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'
sumber
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.
sumber
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:
sumber
Saya memiliki pengecualian yang sama saat beralih ke Java 10 dan Spring Boot 2. Kombinasi ketergantungan ini berhasil untuk saya:
sumber
Saya memiliki masalah yang sama dan mencoba solusi @ Paskas, bekerja dengan baik Junit Test pada awalnya. menambahkan dependensi bytebuddy ke pom.xml saya:
Semoga ini membantu.
sumber
Cukup perbarui ke rilis terbaru
org.mockito:mockito-core
. Setelah saya melakukannya, kesalahannya hilang!sumber