플러그인을 초기화 할 수 없습니다 : 인터페이스 org.mockito.plugins.MockMaker
테스트가 시작되면 다음 예외가 발생합니다.
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와 모든 것이 괜찮아 보이지만 여전히 예외가 발생합니다.
어떤 충고?
powermock을 사용하는 경우 종속성이 다음을 가리키는 지 확인하십시오.
org.powermock:powermock-api-mockito2
대신에
org.powermock:powermock-api-mockito
누락 된 참조 :
- byte-buddy-1.6.5.jar
- byte-buddy-agent-1.6.5.jar
- objenesis-2.5.jar
Mockito 2.0.2 베타 이후 Mockito-core에는 종속성이 있습니다.
클래스 경로에 Byte Buddy가 있었지만 (Mockito 2.8.9의 전이 dep) 여전히 예외가 발생했습니다. 저의 이유는 JDK 대신 JRE로 단위 테스트를 실행했기 때문입니다. JDK로 전환하는 것이 저에게 효과적이었습니다.
동일한 문제가 발생했습니다. 동일한 스택 추적이 내 로그에 나타납니다. 일반적으로 프로젝트 설정에
문제가 있습니다 ... 또는 올바르게 다운로드되지 않은 경우 bytebuddys JAR에 문제가있을 수 있습니다.
ClassLoadingStrategy 클래스를 수동으로 확인하려고하면 zip 오류가 발생합니다.
이 경우 일반적으로 다음 위치에있는 로컬 maven 디렉터리에서 Byte Buddy를 수동으로 삭제하는 것으로 충분합니다. 일반적으로 다음 위치에 있습니다.
{home} /. m2 / repository / net / bytebuddy /
다음 번에 프로젝트를 실행하거나 테스트를 시도하면 다시 다운로드되고 작동합니다. 예상대로.
Unfortunatelly common Java ClassLoader는 클래스 또는 jar가 누락되고 jar가 손상 될 때 동일한 방식으로 직면합니다.
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 옵션으로 추가
제 경우에는 비정상적인 환경 설정으로 인해 다음 오류가 발생합니다.
우분투 16.04에서 java 및 javac는 7에 대한 업데이트 대안 이었지만 $ JAVA_HOME은 8로 잘못 설정되었습니다.
나는 $ JAVA_HOME을 제거하고 모든 것을 정상으로 되돌립니다.
이것에 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}
하나의 기존 프로젝트에서 동일한 문제가 발생했습니다. Java 8을 사용하고 추가로 Java 10을 설치했습니다. 그래서이 예외가 발생하기 시작했습니다. Java 10을 제거했지만 도움이되지 않았습니다. maven repo에서 bytebuddy jar를 삭제했지만 도움이되지 않았습니다. maven repo에서 모든 jar를 완전히 제거한 후에야 프로젝트를 다시 컴파일 할 수 있습니다.
나를 위해 작동하는 버전 선언 제거 :
예:
<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 패키지 간의 버전 문제로 인한 것일 수 있습니다.
Netbeans를 사용하고 있기 때문에 원래 포스터에 대한 답은 아니지만 Eclipse에서 테스트를 다시 작동하려면 "Maven-> Update Project"를 수행해야했습니다.
이 문제가 발생하여 내 버전의 org.mockito.mockito-core 를 최신 릴리스 로 올려서 해결했습니다 . 나는 꽤 오랫동안 이전 버전을 사용하고있었습니다.
오류에 나타나는 maven 저장소 경로에서 "byte-buddy-1.7.11.jar"를 수동으로 삭제합니다. Maven이 프로젝트를 업데이트하면 문제가 해결됩니다. 나를 위해 시도하고 일했습니다.
문제 : 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);
}
}
As mentioned in this thread, removing the initMocks() method removes the error, but all the mocks become null.
✅ Solution: BeforeTest VS BeforeMethod
What I found out for my case is that @BeforeTest was actually posing a problem. Changing it to @BeforeMethod resolved the error.
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);
}
}
My guess is that it is something to do with beans injection; @BeforeTest is executed before any beans got injected while @BeforeMethod is executed after beans injection. Not sure how it really affected though.
Mockito 2 requires dependencies. Adding the two ByteBuddy dependencies below. solved the issue for me:
- byte-buddy-x.x.xx.jar
- byte-buddy-agent-x.x.xx.jar
In my case I include jar files in the project, which can be found at: https://bintray.com/raphw/maven/ByteBuddy/
If you need it for a Maven project, simply add:
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.9.14</version>
<type>pom</type>
</dependency>
I had the same exception when switch to Java 10 and Spring Boot 2. This dependency combination worked for me:
<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>
I had the same issue and tryed @Paskas's solution, worked well Junit Test ok at first. added the bytebuddy dependency to my pom.xml:
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-dep</artifactId>
<version>1.9.7</version>
</dependency>
Hope this helps.
Just update to the latest release of org.mockito:mockito-core. Once I did, the errors disappeared!
In my case, I was working on a project that does not use the maven build system. So this is what worked for me.
- Navigated to the maven repo for mockito (used v2.26): https://mvnrepository.com/artifact/org.mockito/mockito-core/2.26.0. I downloaded the jar.
- On the same page at the bottom, I looked up the dependencies. For mockito 2.26.0, these dependencies are:
- Byte Buddy v.1.9.10 (https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy/1.9.10)
- Byte Buddy Java Agent v1.9.10 (https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy-agent/1.9.10)
- Objenesis v2.6 (https://mvnrepository.com/artifact/org.objenesis/objenesis/2.6) I downloaded the jar files for the above mockito dependencies In Eclipse I created a user library containing the four jar file and added it to my project.
NB: (creating the library is optional, you can add the jars directly to your project build path)
Hope this helps someone.
'Nice programing' 카테고리의 다른 글
| WebDriver를 사용하여 경고가 있는지 확인하는 방법은 무엇입니까? (0) | 2020.11.20 |
|---|---|
| 앵커 태그 안에 앵커 태그 만들기 (0) | 2020.11.20 |
| 개체 배열을 정수 배열로 캐스팅 오류 (0) | 2020.11.20 |
| Java에서 contains ()에 대한 가장 빠른 데이터 구조? (0) | 2020.11.20 |
| 용어 설명 : 엔티티 "수화": DB에서 속성 가져 오기 (0) | 2020.11.20 |