ไม่สามารถเริ่มต้นปลั๊กอิน: interface org.mockito.plugins.MockMaker


94

ฉันได้รับข้อยกเว้นดังต่อไปนี้เมื่อเริ่มการทดสอบ:

    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)

นี่คือการทดสอบของฉัน:

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

ฉันใช้ NetBeans 8.2 ฉันดาวน์โหลด mockito-core-2.7.0.jar แล้วฉันเลือก "Test Libraries" -> "Add Jar" และเพิ่ม mockito-core-2.7.0.jar

Classpath และทุกอย่างดูโอเคฉันยังคงได้รับข้อยกเว้น

คำแนะนำใด ๆ?


1
ตรวจสอบวิธีแก้ปัญหาได้ที่stackoverflow.com/a/41964561/4903889
AskQ

การอัปเกรดเป็น Mockito เวอร์ชันใหม่ช่วยฉันแก้ปัญหานี้ได้
Yogesh Patil

การล้างแคช Gradle และดาวน์โหลดการอ้างอิงทั้งหมดตั้งแต่เริ่มต้นแก้ไขให้ฉัน (ดู: stackoverflow.com/a/13567793/4568679สำหรับการล้างแคช)
Slav

คำตอบ:


99

หากคุณใช้ powermock ให้แน่ใจว่าการอ้างอิงของคุณชี้ไปที่:

org.powermock:powermock-api-mockito2

แทน

org.powermock:powermock-api-mockito

1
ฉันยังไม่รู้สาเหตุที่แท้จริง แต่คำตอบนี้ช่วยฉันได้เมื่อการทดสอบของฉันล้มเหลวหลังจากอัปเกรด Spring เวอร์ชัน 1.5.14-RELEASE เป็น 2.0.4-RELEASE
Kenny

1
คำถามไม่มีส่วนเกี่ยวข้องกับ powermock ปัญหาเกิดขึ้นเมื่อคุณใช้ jre แทน jdk
Łukasz Rzeszotarski

15
ฉันไม่ได้ใช้PowerMock
IgorGanapolsky

48

ไม่มีการอ้างอิงถึง:

  • ไบต์บัดดี้ 1.6.5.jar
  • ไบต์บัดดี้ตัวแทน 1.6.5.jar
  • objenesis-2.5.jar

ตั้งแต่ Mockito 2.0.2 เบต้า Mockito-core มีการอ้างอิง


7
ไลบรารีเหล่านั้นจะรวมไว้โดยค่าเริ่มต้นนี่ไม่ใช่วิธีแก้ปัญหา
Eduardo

ฉันสามารถยืนยันได้ว่าการเพิ่มไบต์ - บัดดี้ล่าสุด (และเป็นไปได้มากกว่านั้นคือไบต์ - บัดดี้ - เอเจนต์) ในการตั้งค่าม็อกกิโตที่ "ยิ่งใหญ่ที่สุด" ช่วยได้ที่นี่ สำหรับฉันข้อยกเว้นจากคำถามปรากฏขึ้นหลังจากเปิดใช้คลาส "เยาะเย้ยขั้นสุดท้าย" ด้วย mockito 2
GhostCat

1
สิ่งเหล่านี้เป็นการอ้างอิงแบบสกรรมกริยาที่คุณไม่จำเป็นต้องเพิ่มอย่างชัดเจน
Łukasz Rzeszotarski

สำหรับmockito 2.25.1คุณเพียงต้องการobjenesis-3.0.1.jarและbyte-buddy-1.9.12.jar.
user1485864

Thease deps จะแสดงอยู่ในหน้า mavenด้วยที่ด้านล่างของหน้า รวมทั้งช่วยแก้ปัญหา
Davide

13

ฉันมี Byte Buddy บน classpath (เป็นสกรรมกริยาจาก Mockito 2.8.9) และยังคงได้รับข้อยกเว้น เหตุผลสำหรับฉันคือฉันทำการทดสอบหน่วยด้วย JRE แทนที่จะเป็น JDK การเปลี่ยนมาใช้ JDK ใช้ได้ผลสำหรับฉัน


1
คุณเปลี่ยนสิ่งนี้อย่างไร?
Taranmeet Singh

2
@TaranmeetSingh หากคุณใช้ Android Studio ให้ไปที่ไฟล์> โครงสร้างโครงการ> ตำแหน่ง SDK และตรวจสอบเส้นทางไปยัง JDK ของคุณว่าถูกต้อง (คุณจะต้องดาวน์โหลด JDK หากคุณยังไม่ได้ดาวน์โหลดจากเว็บไซต์ Oracle)
Lydia Ralph

สวัสดี @LydiaRalph ขอบคุณสำหรับข้อเสนอแนะที่จริงฉันมีปัญหาที่แตกต่างกันโดยสิ้นเชิง ฉันกำลังเขียนกรณีทดสอบหน่วยสำหรับหนึ่งในโมดูล (ซึ่งเป็นโครงการสตูดิโอ Android แบบสแตนด์อโลน) แต่ฉันได้เปิดโครงการทั้งหมดในสตูดิโอ android แทน การเปลี่ยนไปใช้โครงการแบบสแตนด์อะโลนช่วยแก้ปัญหานี้ให้ฉันได้
Taranmeet Singh

@Stefano วิธีการเปลี่ยนตามที่ฉันไม่ได้กล่าวถึงใด ๆ ที่ใช้ jdk หรือ jre
Tarun

สิ่งนี้แก้ไขให้ฉัน ฉันเพิ่งลบ JRE ออกจาก Java Runtimes ของ Eclipse เหลือเพียง JDK
Guillaume F.

6

ฉันมีปัญหาเดียวกัน - stacktrace เดียวกันปรากฏในบันทึกของฉัน โดยทั่วไปจะเป็นปัญหากับการตั้งค่าโครงการ ... หรือ
ปัญหาอาจอยู่ใน bytebuddys JARs หากสิ่งเหล่านี้ไม่ได้ดาวน์โหลดอย่างถูกต้อง
เมื่อฉันพยายามตรวจสอบคลาส ClassLoadingStrategy ด้วยตนเองฉันได้รับข้อผิดพลาดzip

ในกรณีนี้ก็เพียงพอแล้วที่จะลบ Byte Buddy ออกจากไดเร็กทอรี maven ในเครื่องโดยปกติจะอยู่ที่:
{home} /. m2 / repository / net / bytebuddy /

การพยายามรันโปรเจ็กต์ต่อไปหรือการทดสอบจะถูกดาวน์โหลดอีกครั้งและควรใช้งานได้ อย่างที่คาดไว้.

Java ClassLoader ทั่วไปที่โชคร้ายเผชิญในลักษณะเดียวกันเมื่อคลาสหรือ jar หายไปรวมทั้ง jar เสียหาย


มีความเป็นไปได้อีกอย่างหนึ่ง: ไฮเบอร์เนตยังมีnet.bytebuddy*การพึ่งพาดังนั้นการพึ่งพาอาจขัดแย้งกัน
ruzenhack

5

ปัญหานี้กับ Mockito2 เกิดขึ้นหากคุณเปิดใช้งานตัวเลือกเพื่อจำลองคลาสสุดท้าย

ซึ่งหมายความว่าเมื่ออยู่ในไดเร็กทอรีtest / resources / mockito-extensions ของคุณคุณมีไฟล์ชื่อorg.mockito.plugins.MockMaker ที่มีเนื้อหาmock-maker-inlineต่อไปนี้

ในกรณีนั้น byte-buddy ซึ่งเป็นการพึ่งพาสกรรมกริยาสำหรับ mockito-core มีปัญหาในการแนบเอเจนต์ของตัวเองกับกระบวนการ java แต่ปัญหาจะเกิดขึ้นเมื่อคุณใช้ JRE เท่านั้น

วิธีแก้ปัญหาจะเป็นอย่างใดอย่างหนึ่ง:

  • ใช้ JDK แทน JRE

หรือ

  • เพิ่ม-javaagent:byte-buddy-agent-*.jarเป็นตัวเลือก VM

ใน Android Studio คุณจะตรวจสอบได้อย่างไรว่าคุณใช้ JRE แทน JDK และคุณจะเปลี่ยนได้อย่างไร
sbearben

ฉันมีปัญหาเดียวกันกับ Android Studio มีใครประสบความสำเร็จบ้าง?
Ajay Thomas

เปลี่ยนจาก Embedded JRE เป็น JDK 14 และใช้งานได้
Abhimanyu

3

ปัญหา: PowerMock + Mockito + TestNG + PowerMockTestCase

แบ่งปันปัญหา / วิธีแก้ปัญหาของฉันเผื่อว่าจะช่วยใครได้

การอ้างอิงของฉันชี้ถูกต้องทั้งหมด:

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'

แต่ฉันยังคงได้รับข้อผิดพลาดต่อไปนี้:

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)

การทดสอบของฉันเป็นดังนี้:

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

ดังที่กล่าวไว้ในเธรดนี้การลบinitMocks()เมธอดจะเป็นการลบข้อผิดพลาด แต่ mocks ทั้งหมดกลายเป็นโมฆ


✅วิธีแก้ไข: BeforeTest VS BeforeMethod

สิ่งที่ฉันพบในกรณีของฉันคือมัน@BeforeTestกำลังมีปัญหา การเปลี่ยนเพื่อ@BeforeMethodแก้ไขข้อผิดพลาด

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

ฉันเดาว่ามันเกี่ยวข้องกับการฉีดถั่ว @BeforeTestจะดำเนินการก่อนที่จะฉีดถั่วใด ๆ ในขณะที่@BeforeMethodดำเนินการหลังการฉีดถั่ว ไม่แน่ใจว่ามันได้รับผลกระทบอย่างไร


1

ในกรณีของฉันฉันกำลังทำงานในโครงการที่ไม่ได้ใช้ระบบสร้าง maven นี่คือสิ่งที่ได้ผลสำหรับฉัน

หมายเหตุ: (การสร้างไลบรารีเป็นทางเลือกคุณสามารถเพิ่มไหลงในเส้นทางการสร้างโครงการของคุณได้โดยตรง)

หวังว่านี่จะช่วยใครบางคนได้


1

ลบ "byte-buddy-1.7.11.jar" ด้วยตนเองจากพา ธ ที่เก็บ maven ซึ่งปรากฏในข้อผิดพลาด Maven อัปเดตโครงการและปัญหาจะได้รับการแก้ไข พยายามและทำงานให้ฉัน


1

Mockito 2 ต้องการการอ้างอิง การเพิ่มการอ้างอิง ByteBuddy สองรายการด้านล่าง แก้ไขปัญหาให้ฉัน:

  • ไบต์บัดดี้ xxxx.jar
  • ไบต์บัดดี้ตัวแทน xxxx.jar

ในกรณีของฉันฉันรวมไฟล์ jar ไว้ในโปรเจ็กต์ซึ่งสามารถพบได้ที่: https://bintray.com/raphw/maven/ByteBuddy/

หากคุณต้องการสำหรับโครงการ Maven เพียงเพิ่ม:

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

1

สำหรับฉันปัญหาคือ IntelliJ ทำการทดสอบเป็นการทดสอบการรวม ดังนั้นฉันต้องสร้างการทดสอบ JUnit ด้วยตนเอง

ป้อนคำอธิบายภาพที่นี่


0

ในกรณีของฉันการตั้งค่า env ที่ผิดปกติบางอย่างจะนำไปสู่ข้อผิดพลาดนี้ด้วย:

ใน ubuntu 16.04 java และ javac ได้รับการอัปเดตทางเลือกเป็น 7 แต่ $ JAVA_HOME ถูกตั้งค่าผิดเป็น 8

ฉันลบ $ JAVA_HOME และทุกอย่างกลับสู่สภาวะปกติ


0

การเพิ่มด้าน bnd ให้กับสิ่งนี้

การเพิ่มคำตอบของ Paskasคุณจะต้องรวมการอ้างอิงในที่เก็บ cnf maven ด้วยหากคุณกำลังใช้งาน (เช่นของฉัน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

และเพื่อการอ้างอิงที่สะดวกคุณสามารถรวมตัวแปร bnd ไว้ในไฟล์ 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

และในไฟล์ bnd ของโปรเจ็กต์ของคุณ

-testpath:\
    ${mockito}

0

ฉันมีปัญหาเดียวกันในโครงการหนึ่งที่มีอยู่ ฉันใช้ java 8 และติดตั้ง java 10 เพิ่มเติมดังนั้นฉันจึงเริ่มได้รับข้อยกเว้นนี้ ฉันถอนการติดตั้ง java 10 มันไม่ได้ช่วยอะไร ฉันลบขวด bytebuddy จาก maven repo มันไม่ได้ช่วยอะไร หลังจากลบไหทั้งหมดจาก maven repo เสร็จแล้วฉันสามารถรวบรวมโปรเจ็กต์อีกครั้ง


0

ลบการประกาศเวอร์ชันใช้ได้ผลสำหรับฉัน:

ตัวอย่าง:

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

ลบ 2.8.9

หลังจาก:

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

อาจเกิดจากปัญหาเวอร์ชันระหว่างแพ็กเกจ jar ของการอ้างอิงนี้


คุณกำลังสืบทอดเวอร์ชันนี้อย่างแน่นอนเนื่องจากการลบออกจะทำให้โครงการเสียหาย ผิดมากตอบผิด
eduyayo

0

ไม่ใช่คำตอบสำหรับโปสเตอร์ต้นฉบับเนื่องจากเขา / เขาใช้ Netbeans แต่ใน Eclipse ฉันต้องทำ "Maven -> Update Project" เพื่อให้การทดสอบทำงานอีกครั้ง



0

ฉันแก้ไขปัญหานี้โดยการลบjmockitใน POM XML สำหรับ Maven หลังจากนั้นการทดสอบ Junit 5 ของฉันก็ทำงานได้อย่างสมบูรณ์

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

ด้วยการพึ่งพานี้ฉันมักจะได้รับข้อผิดพลาดเช่น:

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

กำหนดการพึ่งพา mockito อย่างชัดเจนเป็นเวอร์ชันใน powermock และ springboot ของคุณแตกต่างจากกลุ่ม testCompile: 'org.mockito', ชื่อ: 'mockito-core', เวอร์ชัน: '2.8.9'


0

การพึ่งพาของฉันสำหรับ mockito อยู่ภายใต้ androidTestImplementation และไม่ได้อยู่ภายใต้ testImplementation

ฉันได้รับข้อผิดพลาดเดียวกันนี้เมื่อพยายามใช้ม็อกโตะกับการทดสอบหน่วยของฉัน สิ่งที่ฉันต้องทำคือเพิ่มการพึ่งพา


0

ในกรณีของฉันหลังจากถอดออกmockito-coreการทดสอบก็ใช้ได้!

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

เวอร์ชันของฉันอยู่ที่นี่และ JDK คือ 1.8.0_121

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

ตอนนี้การพึ่งพาของฉันคือ:

  • powermock-api-mockito2
  • โมดูล powermock-junit4

-1

ฉันมีข้อยกเว้นเหมือนกันเมื่อเปลี่ยนเป็นJava 10และ Spring Boot 2 การรวมกันของการพึ่งพานี้ใช้ได้กับฉัน:

    <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

ฉันมีปัญหาเดียวกันและลองใช้โซลูชันของ @ Paskas ทำงานได้ดี Junit Test ตกลงในตอนแรก เพิ่มการพึ่งพา bytebuddy ใน pom.xml ของฉัน:

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

หวังว่านี่จะช่วยได้


-2

เพียงอัปเดตเป็นรุ่นล่าสุดของorg.mockito:mockito-core. เมื่อฉันทำข้อผิดพลาดก็หายไป!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.