Không thể khởi chạy plugin: interface org.mockito.plugins.MockMaker


94

Tôi nhận được ngoại lệ sau khi bắt đầu kiểm tra:

    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)

Đây là bài kiểm tra của tôi:

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

Tôi đang sử dụng NetBeans 8.2. Tôi đã tải xuống mockito-core-2.7.0.jar và sau đó tôi chọn "Test Libraries" -> "Add Jar" và thêm mockito-core-2.7.0.jar.

Classpath và mọi thứ có vẻ ổn, tôi ', tôi vẫn nhận được ngoại lệ.

Có lời khuyên nào không?


1
Kiểm tra giải pháp tại stackoverflow.com/a/41964561/4903889
AskQ

Nâng cấp lên phiên bản Mockito mới hơn đã giúp tôi giải quyết vấn đề này.
Yogesh Patil

Việc xóa bộ nhớ cache Gradle và tải xuống tất cả các phụ thuộc từ đầu đã khắc phục sự cố cho tôi. (Xem: stackoverflow.com/a/13567793/4568679 cho bộ nhớ cache thanh toán bù trừ)
Slav

Câu trả lời:


99

Nếu bạn đang sử dụng powermock, hãy đảm bảo rằng các phần phụ thuộc của bạn trỏ đến:

org.powermock:powermock-api-mockito2

thay vì

org.powermock:powermock-api-mockito

1
Tôi chưa biết nguyên nhân chính xác, nhưng câu trả lời này đã giúp tôi khi các bài kiểm tra của tôi không thành công sau khi nâng cấp phiên bản Spring 1.5.14-RELEASE lên 2.0.4-RELEASE
Kenny

1
Câu hỏi không liên quan gì đến powermock. Sự cố xảy ra khi bạn sử dụng jre thay vì jdk.
Łukasz Rzeszotarski

15
Tôi không sử dụng PowerMock
IgorGanapolsky

48

Thiếu tham chiếu đến:

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

Kể từ phiên bản beta Mockito 2.0.2, Mockito-core có các phần phụ thuộc.


7
những thư viện được bao gồm theo mặc định, đây không phải là giải pháp
Eduardo

Tôi có thể xác nhận rằng việc thêm các JAR byte-budy mới nhất (và nhiều khả năng là byte-buddy-agent) vào trợ giúp thiết lập mockito "mới nhất tốt nhất" tại đây. Đối với tôi, ngoại trừ từ các câu hỏi xuất hiện sau khi kích hoạt "chế giễu của thức" lớp học với Mockito 2.
GhostCat

1
đây là những phụ thuộc bắc cầu mà bạn không cần phải thêm chúng một cách rõ ràng.
Łukasz Rzeszotarski

Đối với mockito 2.25.1bạn chỉ cần objenesis-3.0.1.jarbyte-buddy-1.9.12.jar.
user1485864

thease deps cũng được liệt kê trong trang maven , ở cuối trang. Bao gồm cả nó giải quyết vấn đề.
Davide

13

Tôi đã sử dụng Byte Buddy trên classpath (là transitive dep của Mockito 2.8.9) và vẫn có ngoại lệ. Lý do cho tôi là tôi đã chạy các bài kiểm tra Đơn vị với JRE thay vì JDK. Chuyển sang JDK phù hợp với tôi.


1
Bạn đã thay đổi điều này như thế nào?
Taranmeet Singh

2
@TaranmeetSingh nếu bạn đang chạy với Android Studio, hãy chuyển đến Tệp> Cấu trúc dự án> Vị trí SDK và kiểm tra các đường dẫn đến JDK của bạn có chính xác không. (Bạn sẽ cần tải xuống JDK nếu chưa có từ trang web Oracle.)
Lydia Ralph,

Xin chào @LydiaRalph, cảm ơn vì đề xuất thực sự tôi đã gặp một vấn đề hoàn toàn khác. Tôi đang viết các trường hợp kiểm thử Đơn vị cho một trong các mô-đun (cũng là các dự án studio android độc lập) nhưng thay vào đó tôi đã mở toàn bộ dự án trong studio android. Chuyển sang dự án độc lập đã giải quyết điều này cho tôi.
Taranmeet Singh

@Stefano, làm thế nào để chuyển đổi như tôi đã không được đề cập bất kỳ nơi sử dụng jdk hoặc jre
Tarun

CÁi này đã sửa nó giúp tôi. Tôi vừa xóa JRE khỏi Java Runtimes của Eclipse, chỉ để lại JDK.
Guillaume F.

6

Tôi đã gặp vấn đề tương tự - cùng một ngăn xếp xuất hiện trong nhật ký của tôi. Nó thường có vấn đề với thiết lập dự án ... HOẶC
Sự cố có thể nằm trong các JAR bytebuddys nếu chúng không được tải xuống đúng cách.
Khi tôi cố gắng kiểm tra lớp ClassLoadingStrategy theo cách thủ công thì tôi gặp lỗi zip .

Trong trường hợp đó, chỉ cần xóa thủ công Byte Buddy khỏi thư mục maven cục bộ, thường nằm tại:
{home} /. M2 / repository / net / bytebuddy /

Lần thử chạy dự án hoặc kiểm tra tiếp theo, chúng sẽ được tải xuống lại và hoạt động như mong đợi.

Java ClassLoader phổ biến không may gặp phải theo cách tương tự khi thiếu lớp hoặc jar cũng như jar bị hỏng.


Có một khả năng khác: Hibernate cũng có net.bytebuddy*như một phụ thuộc, vì vậy các phụ thuộc có thể xung đột với nhau.
ruzenhack

5

Sự cố này xảy ra với Mockito2 nếu bạn bật tùy chọn để mô phỏng các lớp cuối cùng.

Điều này có nghĩa là khi trong thư mục test / resources / mockito-extensions, bạn có tệp có tên org.mockito.plugins.MockMaker với nội dung mô phỏng nội dung sau .

Trong trường hợp đó, byte-buddy, một phụ thuộc bắc cầu cho mockito-core, có vấn đề khi đính kèm tác nhân riêng vào quy trình java. Nhưng vấn đề chỉ xảy ra khi bạn sử dụng JRE.

Giải pháp sẽ là:

  • Sử dụng JDK thay vì JRE

hoặc là

  • thêm -javaagent:byte-buddy-agent-*.jardưới dạng một tùy chọn VM

Trong Android Studio, làm cách nào để kiểm tra xem bạn có đang sử dụng JRE thay vì JDK hay không và bạn sẽ thay đổi nó như thế nào?
sbearben

Tôi gặp vấn đề tương tự với Android Studio. Có ai thành công không?
Ajay Thomas

Đã thay đổi từ JRE nhúng sang JDK 14 và nó đã hoạt động.
Abhimanyu

3

Sự cố: PowerMock + Mockito + TestNG + PowerMockTestCase

Chia sẻ vấn đề / giải pháp của tôi trong trường hợp nó giúp ích cho bất kỳ ai.

Tất cả các phụ thuộc của tôi đều được trỏ chính xác:

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'

Nhưng tôi vẫn gặp lỗi sau:

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)

Thử nghiệm của tôi là một cái gì đó như vậy:

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

Như đã đề cập trong chủ đề này, việc loại bỏ initMocks()phương thức sẽ loại bỏ lỗi, nhưng tất cả các mock đều trở thành rỗng.


✅ Giải pháp: BeforeTest VS BeforeMethod

Những gì tôi phát hiện ra cho trường hợp của mình là nó @BeforeTestthực sự đang đặt ra một vấn đề. Thay đổi nó để @BeforeMethodgiải quyết lỗi.

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

Tôi đoán rằng nó là một cái gì đó để làm với tiêm đậu; @BeforeTestđược thực hiện trước khi bất kỳ hạt đậu nào được tiêm trong khi @BeforeMethodđược thực thi sau khi tiêm hạt đậu. Tuy nhiên, không chắc chắn nó thực sự ảnh hưởng như thế nào.


1

Trong trường hợp của tôi, tôi đang làm việc trên một dự án không sử dụng hệ thống xây dựng maven. Vì vậy, đây là những gì đã làm việc cho tôi.

NB: (việc tạo thư viện là tùy chọn, bạn có thể thêm các lọ trực tiếp vào đường dẫn xây dựng dự án của mình)

Hy vọng điều này sẽ giúp ai đó.


1

Xóa thủ công "byte-buddy-1.7.11.jar" khỏi đường dẫn kho lưu trữ maven xuất hiện trong lỗi. Cập nhật dự án Maven và vấn đề sẽ được giải quyết. Đã thử và làm việc cho tôi.


1

Mockito 2 yêu cầu các phụ thuộc. Thêm hai phụ thuộc ByteBuddy bên dưới. đã giải quyết vấn đề cho tôi:

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

Trong trường hợp của tôi, tôi bao gồm các tệp jar trong dự án, có thể được tìm thấy tại: https://bintray.com/raphw/maven/ByteBuddy/

Nếu bạn cần nó cho một dự án Maven, chỉ cần thêm:

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

1

Đối với tôi, vấn đề là IntelliJ đã chạy thử nghiệm dưới dạng thử nghiệm tích hợp. Vì vậy, tôi cần tạo thử nghiệm JUnit theo cách thủ công

nhập mô tả hình ảnh ở đây


0

trong trường hợp của tôi, một số cài đặt env bất thường cũng sẽ dẫn đến lỗi này:

trong ubuntu 16.04, java và javac đã là lựa chọn cập nhật thay thế cho 7 nhưng $ JAVA_HOME đã bị đặt sai thành 8

tôi xóa $ JAVA_HOME và mọi thứ trở lại bình thường


0

Thêm một khía cạnh bnd vào điều này

Thêm vào câu trả lời của Paskas , bạn cũng phải bao gồm các phụ thuộc trong kho lưu trữ cnf maven, nếu bạn đang sử dụng một (như của tôi 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

và để thuận tiện cho việc tham khảo, bạn có thể bao gồm một biến bnd trong 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

và trong tệp bnd của dự án của bạn

-testpath:\
    ${mockito}

0

Tôi đã gặp vấn đề tương tự trong một dự án hiện có. Tôi đã sử dụng java 8 và cài đặt thêm java 10. Vì vậy, tôi bắt đầu nhận được ngoại lệ này. Tôi đã cài đặt java 10, nó không được giúp đỡ. Tôi đã xóa các lọ bytebuddy khỏi repo maven, nó không giúp được gì. Chỉ sau khi loại bỏ hoàn toàn tất cả các lọ khỏi kho maven, tôi mới có thể biên dịch lại dự án.


0

Xóa khai báo phiên bản phù hợp với tôi:

Thí dụ:

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

loại bỏ 2,8,9

Sau:

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

Nó có thể do sự cố phiên bản giữa các gói jar của sự phụ thuộc này.


bạn chắc chắn đang kế thừa phiên bản vì việc xóa nó sẽ phá vỡ dự án. Sai nên trả lời sai.
eduyayo

0

Không phải câu trả lời cho người đăng ban đầu, vì anh ấy / anh ấy đang sử dụng Netbeans, nhưng trong Eclipse, tôi cần thực hiện "Maven -> Cập nhật Dự án" để các thử nghiệm hoạt động trở lại.


0

Tôi đã gặp sự cố này và đã giải quyết nó bằng cách chuyển phiên bản org.mockito.mockito-core của mình lên phiên bản mới nhất. Tôi đã sử dụng một phiên bản cũ hơn trong một thời gian.


0

Tôi đã giải quyết vấn đề này bằng cách loại bỏ jmockit trong POM XML cho Maven. Sau đó, các bài kiểm tra Junit 5 của tôi hoạt động hoàn hảo.

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

Với sự phụ thuộc này, tôi luôn gặp lỗi như:

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

Xác định rõ ràng sự phụ thuộc của mockito là phiên bản trong powermock và springboot của bạn khác với testCompile group: 'org.mockito', name: 'mockito-core', phiên bản: '2.8.9'


0

Sự phụ thuộc của tôi đối với mockito nằm trong androidTestImplementation chứ không phải testImplementation.

Tôi đã gặp lỗi tương tự khi cố gắng sử dụng mockito với các bài kiểm tra đơn vị của mình. Tất cả những gì tôi phải làm là thêm phần phụ thuộc.


0

Trong trường hợp của tôi, sau khi loại bỏ mockito-core, kiểm tra đã hoạt động!

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

Phiên bản của tôi ở đây và JDK là 1.8.0_121.

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

Bây giờ phụ thuộc của tôi là:

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

-1

Tôi đã có cùng một ngoại lệ khi chuyển sang Java 10 và Spring Boot 2. Sự kết hợp phụ thuộc này đã làm việc cho tôi:

    <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

Tôi đã gặp vấn đề tương tự và đã thử giải pháp của @ Paskas, lúc đầu hoạt động tốt Junit Test ok. đã thêm phụ thuộc bytebuddy vào pom.xml của tôi:

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

Hi vọng điêu nay co ich.


-2

Chỉ cần cập nhật lên phiên bản mới nhất của org.mockito:mockito-core. Một khi tôi đã làm, các lỗi đã biến mất!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.