플러그인을 초기화 할 수 없습니다 : 인터페이스 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와 모든 것이 괜찮아 보이지만 여전히 예외가 발생합니다.

어떤 충고?



Mockito의 최신 버전으로 업그레이드하면이 문제를 해결할 수있었습니다.
Yogesh Patil

Gradle 캐시를 지우고 처음부터 모든 종속성을 다운로드하면 문제가 해결되었습니다. (참조 : stackoverflow.com/a/13567793/4568679 )
Slav

답변:


98

powermock을 사용하는 경우 종속성이 다음을 가리키는 지 확인하십시오.

org.powermock:powermock-api-mockito2

대신에

org.powermock:powermock-api-mockito

1
정확한 원인은 아직 모르겠지만 Spring 버전 1.5.14-RELEASE를 2.0.4-RELEASE로 업그레이드 한 후 테스트가 실패했을 때이 답변이 도움이되었습니다
Kenny

1
질문은 powermock과 관련이 없습니다. jdk 대신 jre를 사용할 때 문제가 발생합니다.
Łukasz Rzeszotarski

15
PowerMock을
IgorGanapolsky 19

48

누락 된 참조 :

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

Mockito 2.0.2 베타 이후 Mockito-core에는 종속성이 있습니다.


7
이러한 라이브러리는 기본적으로 포함되어 있지만 이것은 해결책이 아닙니다
Eduardo

여기에서 "최신 최대"mockito 설정 도움말에 최신 byte-budy (그리고 아마도 byte-buddy-agent) JAR을 추가하는 것을 확인할 수 있습니다. 나를 위해, 문제에서 예외가 가능 mockito 2와 클래스 "최종의 조롱"이후에 나타났다
GhostCat

1
이는 명시 적으로 추가 할 필요가없는 전 이적 종속성입니다.
Łukasz Rzeszotarski

mockito 2.25.1당신을 위해 objenesis-3.0.1.jarbyte-buddy-1.9.12.jar.
user1485864

thease deps는 페이지 하단의 maven 페이지 에도 나열됩니다 . 그것을 포함하면 문제가 해결됩니다.
Davide

13

클래스 경로에 Byte Buddy가 있었지만 (Mockito 2.8.9의 전이 dep) 여전히 예외가 발생했습니다. 저의 이유는 JDK 대신 JRE로 단위 테스트를 실행했기 때문입니다. JDK로 전환하는 것이 저에게 효과적이었습니다.


1
어떻게 변경 했습니까?
Taranmeet Singh

2
@TaranmeetSingh Android Studio로 실행중인 경우 File> Project Structure> SDK location으로 이동하여 JDK 경로가 올바른지 확인합니다. (오라클 웹 사이트에서 아직 JDK를 다운로드하지 않았다면 다운로드해야합니다.)
Lydia Ralph

안녕하세요 @LydiaRalph 실제로 나는 완전히 다른 문제가 있다는 제안에 감사드립니다. 나는 독립형 안드로이드 스튜디오 프로젝트 인 모듈 중 하나에 대한 단위 테스트 케이스를 작성했지만 대신 안드로이드 스튜디오에서 전체 프로젝트를 열었습니다. 독립형 프로젝트로 전환하면이 문제가 해결되었습니다.
Taranmeet Singh

@Stefano, jdk 또는 jre를 사용하는 곳에서 언급하지 않은 것처럼 전환하는 방법
Tarun

이것은 나를 위해 그것을 고쳤습니다. Eclipse의 Java Runtimes에서 JRE를 제거하고 JDK 만 남겼습니다.
Guillaume F.

6

동일한 문제가 발생했습니다. 동일한 스택 추적이 내 로그에 나타납니다. 일반적으로 프로젝트 설정에
문제가 있습니다 ... 또는 올바르게 다운로드되지 않은 경우 bytebuddys JAR에 문제가있을 수 있습니다.
ClassLoadingStrategy 클래스를 수동으로 확인하려고하면 zip 오류가 발생합니다.

이 경우 일반적으로 다음 위치에있는 로컬 maven 디렉토리에서 Byte Buddy를 수동으로 삭제하는 것으로 충분합니다. 일반적으로 다음 위치에 있습니다.
{home} /. m2 / repository / net / bytebuddy /

다음 번에 프로젝트를 실행하거나 테스트를 시도하면 다시 다운로드되고 작동합니다. 예상대로.

Unfortunatelly common Java ClassLoader는 클래스 또는 jar가 누락되고 jar가 손상 될 때 동일한 방식으로 직면합니다.


또 다른 가능성이 있습니다. Hibernate는 또한 net.bytebuddy*의존성을 가지고 있으므로 의존성이 서로 충돌 할 수 있습니다.
ruzenhack

5

Mockito2의이 문제는 최종 클래스를 모의하는 옵션을 활성화하면 발생합니다.

이것은 test / resources / mockito-extensions 디렉토리 에 다음 내용이 mock-maker-inline 인 org.mockito.plugins.MockMaker 파일이 있음 을 의미합니다 .

이 경우 mockito-core의 전이 종속성 인 byte-buddy는 자체 에이전트를 Java 프로세스에 연결하는 데 문제가 있습니다. 그러나 문제는 JRE를 사용할 때만 발생합니다.

해결책은 다음 중 하나입니다.

  • JRE 대신 JDK 사용

또는

  • -javaagent:byte-buddy-agent-*.jarVM 옵션으로 추가

Android Studio에서 JDK 대신 JRE를 사용하고 있는지 어떻게 확인하고 어떻게 변경 하시겠습니까?
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()메서드를 제거하면 오류가 제거되지만 모의는 모두 null이됩니다.


✅ 해결책 : 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 빌드 시스템을 사용하지 않는 프로젝트를 진행하고있었습니다. 그래서 이것이 저에게 효과적이었습니다.

주의 : (라이브러리 생성은 선택 사항이며 프로젝트 빌드 경로에 jar를 직접 추가 할 수 있습니다)

이것이 누군가를 돕기를 바랍니다.


1

오류에 나타나는 maven 저장소 경로에서 "byte-buddy-1.7.11.jar"를 수동으로 삭제합니다. Maven이 프로젝트를 업데이트하면 문제가 해결됩니다. 나를 위해 시도하고 일했습니다.


1

Mockito 2에는 종속성이 필요합니다. 아래에 두 개의 ByteBuddy 종속성을 추가합니다. 나를 위해 문제를 해결했습니다.

  • 바이트-버디 -xxxx.jar
  • byte-buddy-agent-xxxx.jar

제 경우에는 https://bintray.com/raphw/maven/ByteBuddy/ 에서 찾을 수있는 프로젝트에 jar 파일을 포함합니다.

Maven 프로젝트에 필요한 경우 다음을 추가하면됩니다.

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

1

나에게 문제는 IntelliJ가 통합 테스트로 테스트를 실행했다는 것입니다. 그래서 JUnit 테스트를 수동으로 만들어야했습니다.

여기에 이미지 설명 입력


0

제 경우에는 비정상적인 환경 설정으로 인해 다음 오류가 발생합니다.

우분투 16.04에서 java 및 javac는 7에 대한 업데이트 대안 이었지만 $ JAVA_HOME은 8로 잘못 설정되었습니다.

나는 $ JAVA_HOME을 제거하고 모든 것을 정상으로 되돌립니다.


0

이것에 bnd 측면 추가

Paskas의 답변 에 추가하면 my와 같은 것을 사용하는 경우 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을 제거했지만 도움이되지 않았습니다. maven repo에서 bytebuddy jar를 삭제했지만 도움이되지 않았습니다. maven repo에서 모든 jar를 완전히 제거한 후에야 프로젝트를 다시 컴파일 할 수 있습니다.


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

Maven 용 POM XML에서 jmockit 을 제거 하여이 문제를 해결했습니다 . 그 후 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

powermock 및 springboot의 버전이 testCompile 그룹 : 'org.mockito', 이름 : 'mockito-core', 버전 : '2.8.9'와 다르므로 mockito 종속성을 명시 적으로 정의하십시오.


0

mockito에 대한 내 종속성은 testImplementation이 아니라 androidTestImplementation에 있습니다.

단위 테스트에서 mockito를 사용하려고 할 때 동일한 오류가 발생했습니다. 내가해야 할 일은 종속성을 추가하는 것뿐이었습니다.


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에서 잘 작동했습니다. 내 pom.xml에 bytebuddy 종속성을 추가했습니다.

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