プラグインを初期化できませんでした:インターフェースorg.mockito.plugins.MockMaker


97

テストを開始すると、次の例外が発生します。

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

NetBeans8.2を使用しています。mockito-core-2.7.0.jarをダウンロードし、[テストライブラリ]-> [Jarの追加]を選択して、mockito-core-2.7.0.jarを追加しました。

クラスパスとすべてが正常に見えます、私はまだ例外を取得しています。

何かアドバイス?



Mockitoの新しいバージョンにアップグレードすると、この問題を解決するのに役立ちました。
YogeshPatil19年

Gradleキャッシュをクリアし、すべての依存関係を最初からダウンロードすると、修正されました。(キャッシュのクリアについては、stackoverflow.com / a / 13567793/4568679を参照してください)
スラブ人

回答:


100

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を使用すると発生します。
ルカシュRzeszotarski

17
私が使用していないPowerMock
IgorGanapolsky

また、PowerMockを使用していない場合はどうなりますか?質問は、インターフェースorg.mockito.plugins.MockMakerを参照しました。
ポートフォリオ

49

参照がありません:

  • バイトバディ-1.6.5.jar
  • byte-buddy-agent-1.6.5.jar
  • objenesis-2.5.jar

Mockito 2.0.2ベータ以降、Mockito-coreには依存関係があります。


7
これらのライブラリはデフォルトで含まれていますが、これは解決策ではありません
Eduardo

ここで、最新のバイトバディ(およびおそらくバイトバディエージェント)JARを「最新の最大の」mockitoセットアップヘルプに追加することが確認できます。私にとっては、質問から例外が有効mockito 2とクラス「最終のモック」の後に現れた
GhostCat

1
これらは推移的な依存関係であり、明示的に追加する必要はありません。
ルカシュRzeszotarski

mockito 2.25.1あなただけが必要objenesis-3.0.1.jarbyte-buddy-1.9.12.jar
user14858 6419年

1
thease depsは、ページ下部のMavenページにもリストされています。それを含めると問題が解決します。
ダビデ

15

クラスパスにByteBuddyがあり(Mockito 2.8.9の推移的な部門です)、それでも例外が発生しました。私の理由は、JDKではなくJREを使用して単体テストを実行したためです。JDKへの切り替えは私のために働いた。


1
これをどのように変更しましたか?
TaranmeetSingh19年

2
@TaranmeetSinghをAndroidStudioで実行している場合は、[ファイル]> [プロジェクト構造]> [SDKの場所]に移動し、JDKへのパスが正しいことを確認します。(あなたは、OracleのWebサイトから持ちでない場合は、JDKをダウンロードする必要があります。)
リディアラルフ

こんにちは@LydiaRalph提案をありがとう、実際にはまったく別の問題がありました。モジュールの1つ(スタンドアロンのAndroid Studioプロジェクトでもあります)の単体テストケースを作成していましたが、代わりにプロジェクト全体をAndroidStudioで開きました。スタンドアロンプ​​ロジェクトに切り替えることで、これは解決しました。
TaranmeetSingh19年

私は使用してJDKやJRE言及していませんでしたよう@Stefano、どのように切り替えるには
タルン

これは私のためにそれを修正しました。EclipseのJavaランタイムからJREを削除し、JDKのみを残しました。
ギヨーム

6

同じ問題が発生しました。同じスタックトレースがログに表示されます。これは通常、プロジェクトのセットアップに
問題があります...または、バイトバディJARが正しくダウンロードされなかった場合、問題が発生する可能性があります。
クラスClassLoadingStrategyを手動でチェックしようとすると、zipエラーが発生します。

その場合、通常は次の場所にあるローカルmavenディレクトリからByte Buddyを手動で削除するだけで十分
です。{home} /。m2 / repository / net / bytebuddy /

次にプロジェクトを実行するか、テストを試みると、再度ダウンロードされ、機能するはずです。予想通り。

残念ながら、一般的なJava ClassLoaderは、クラスまたはjarが欠落している場合や、jarが破損している場合と同じように直面します。


別の可能性があります。Hibernateもnet.bytebuddy*依存関係を持っているため、依存関係が互いに競合している可能性があります。
ruzenhack

6

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

AndroidStudioでも同じ問題が発生します。誰か成功しましたか?
AjayThomas20年

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

私の推測では、それは豆の注入と関係があると思います。 Beanの注入後に実行さ@BeforeTestれている間、Beanが注入される前に実行され@BeforeMethodます。しかし、それが実際にどのように影響したかはわかりません。


powermockなしのソリューションはありますか?
ポートフォリオ

@portfoliobuilder powermockを使用していない場合、私が直面したのと同じ問題が発生することはないと思います。おそらく、このスレッドで与えられた他の提案を再確認できますか?mockitoが更新されていること、jdkを使用していること、および欠落している参照がないことを確認してください。
Ely 2020

1

私の場合、Mavenビルドシステムを使用しないプロジェクトに取り組んでいました。だから、これは私のために働いたものです。

注意:(ライブラリの作成はオプションです。jarをプロジェクトビルドパスに直接追加できます)

これが誰かを助けることを願っています。


1

エラーに表示されるMavenリポジトリパスから「byte-buddy-1.7.11.jar」を手動で削除します。Mavenがプロジェクトを更新すると、問題が解決されます。私のために試してみました。


1

Mockito2には依存関係が必要です。以下に2つのByteBuddy依存関係を追加します。私のために問題を解決しました:

  • バイトバディ-xxxx.jar
  • byte-buddy-agent-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テストを手動で作成する必要がありました

ここに画像の説明を入力してください


たぶんあなたはandroidTestディレクトリにこのユニットテストを持っていますか?ASは、「androidTest」にインストルメント化されたテストがあり、「test」に単体テストがあることを期待していると思います。
キキワ

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

1つの既存のプロジェクトで同じ問題が発生しました。Java 8を使用し、さらにJava 10をインストールしたので、この例外が発生し始めました。Java 10を削除しましたが、役に立ちませんでした。Mavenリポジトリからbytebuddyjarを削除しましたが、役に立ちませんでした。Mavenリポジトリからすべての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-> UpdateProject」を実行する必要がありました。



0

MavenのPOMXMLjmockitを削除することで、この問題を解決しました。その後、私のJunit5テストは完全に機能します。

    <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のバージョンが異なるため、mockitoの依存関係を明示的に定義します。testCompileグループ: 'org.mockito'、名前: 'mockito-core'、バージョン: '2.8.9'


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-module-junit4

0

Android開発では、いくつかのものをインポートする必要があります。

 dependencies {
   testCompile "org.mockito:mockito-core:+"
   androidTestCompile "org.mockito:mockito-android:+"
 }

これの参照を見つけることができませんでしたが、これは私のために働いた唯一のものです。


0

$ {home} .m2 \ repository \ net \ bytebuddyからbytebuddyフォルダーを削除し、pom.xmlからbyte-buddy-agent、byte-buddy、およびobjenesisの依存関係を削除した後、それは私のために機能しました



-1

私は同じ例外を持っていたときにスイッチジャワ10と春ブーツ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のソリューションを試しましたが、最初はJunitTestで問題なく動作しました。私のpom.xmlにbytebuddy依存関係を追加しました:

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

お役に立てれば。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.