Eklenti başlatılamadı: arabirim org.mockito.plugins.MockMaker


94

Testler başladığında şu istisnayı alıyorum:

    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)

Bu benim testim:

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 kullanıyorum. Mockito-core-2.7.0.jar dosyasını indirdim ve ardından "Test Kitaplıkları" -> "Jar Ekle" yi seçip mockito-core-2.7.0.jar dosyasını ekledim.

Sınıf yolu ve her şey yolunda görünüyor, ben hala istisna alıyorum.

Herhangi bir tavsiye?



Mockito'nun daha yeni bir sürümüne geçmek bu sorunu çözmeme yardımcı oldu.
Yogesh Patil

Gradle önbelleğini temizlemek ve tüm bağımlılıkları sıfırdan indirmek benim için sorunu çözdü. ( Önbelleği temizlemek için bkz. Stackoverflow.com/a/13567793/4568679 )
Slav

Yanıtlar:


98

Powermock kullanıyorsanız, bağımlılıklarınızın şunları gösterdiğinden emin olun:

org.powermock:powermock-api-mockito2

onun yerine

org.powermock:powermock-api-mockito

1
Henüz kesin sebebini bilmiyorum, ancak bu cevap, 1.5.14-RELEASE'i 2.0.4-RELEASE'e yükselttikten sonra testlerim başarısız olduğunda bana yardımcı oldu
Kenny

1
Sorunun powermock ile ilgisi yok. Sorun, jdk yerine jre kullandığınızda ortaya çıkar.
Łukasz Rzeszotarski

15
Ben kullanmıyorum PowerMock
IgorGanapolsky

48

Eksik referans:

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

Mockito 2.0.2 beta sürümünden bu yana, Mockito-core bağımlılıklara sahiptir.


7
bu kütüphaneler varsayılan olarak dahil edilmiştir, çözüm bu değildir
Eduardo

En son byte-budy (ve daha büyük olasılıkla byte-buddy-agent) JAR'ları "en son en büyük" mockito kurulum yardımına eklemeyi burada doğrulayabilirim. Benim için sorudaki istisna, mockito 2 ile "finallerin alayını" etkinleştirdikten sonra ortaya çıktı.
GhostCat

1
bunlar, bunları açıkça eklemeniz gerekmeyen geçişli bağımlılıklardır.
Łukasz Rzeszotarski

İçin mockito 2.25.1size gereken tek objenesis-3.0.1.jarve byte-buddy-1.9.12.jar.
user1485864

thease deps maven sayfasında da sayfanın alt kısmında listelenmiştir . Sorunu çözmek dahil.
Davide

13

Byte Buddy sınıf yolunda vardı (Mockito 2.8.9'un geçişli deposu) ve yine de istisna var. Bunun nedeni Birim testlerini JDK yerine JRE ile çalıştırmamdı. JDK'ya geçmek benim için çalıştı.


1
Bunu nasıl değiştirdin?
Taranmeet Singh

2
@TaranmeetSingh, Android Studio ile çalışıyorsanız, Dosya> Proje Yapısı> SDK konumuna gidin ve JDK'nıza giden yolların doğru olduğunu kontrol edin. (Oracle web sitesinden henüz yüklemediyseniz bir JDK indirmeniz gerekecektir.)
Lydia Ralph

Merhaba @LydiaRalph öneri için teşekkürler, aslında tamamen farklı bir sorunum vardı. Modüllerden biri için (aynı zamanda bağımsız android stüdyo projeleri olan) Unit test senaryoları yazıyordum ancak bunun yerine tüm projeyi android stüdyosunda açtım. Bağımsız projeye geçmek bunu benim için çözdü.
Taranmeet Singh

@Stefano, jdk veya jre kullanarak herhangi bir yerde bahsetmediğim gibi nasıl geçiş yapılır
Tarun

Bu benim için düzeltti. JRE'yi Eclipse'in Java Runtimes'ından kaldırdım ve geriye yalnızca JDK kaldım.
Guillaume F.

6

Aynı sorunu yaşadım - günlüğümde aynı yığın izi görünüyor. Tipik olarak proje kurulumuyla ilgili bir sorundur ... VEYA
Bunlar doğru indirilmemişse, sorun bytebuddys JAR'larında olabilir.
ClassLoadingStrategy sınıfını manuel olarak kontrol etmeye çalıştığımda zip hatası alıyorum.

Bu durumda, Byte Buddy'yi genellikle şu konumda bulunan yerel maven dizininden manuel olarak silmek yeterlidir:
{home} /. M2 / repository / net / bytebuddy /

Bir sonraki proje veya testi çalıştırma denemesi, tekrar indirilecek ve çalışmalıdır. beklenildiği gibi.

Maalesef yaygın Java ClassLoader, kavanozun yanı sıra sınıf veya kavanoz eksik olduğunda da aynı şekilde karşı karşıya kalır.


Başka bir olasılık daha var: Hibernate'in net.bytebuddy*bir bağımlılığı da var , dolayısıyla bağımlılıklar birbiriyle çatışıyor olabilir.
ruzenhack

5

Mockito2 ile ilgili bu sorun, son sınıflarla alay etme seçeneğini etkinleştirirseniz oluşur.

Bu, test / resources / mockito-extensions dizininizde aşağıdaki içerik mock-maker-inline ile org.mockito.plugins.MockMaker adlı dosyaya sahip olduğunuz anlamına gelir .

Bu durumda, mockito-core için geçişli bir bağımlılık olan byte-buddy, java sürecine kendi aracısını ekleme sorunu yaşar. Ancak sorun yalnızca JRE kullandığınızda ortaya çıkar.

Çözüm şunlardan biri olabilir:

  • JRE yerine JDK kullanın

veya

  • -javaagent:byte-buddy-agent-*.jarVM seçeneği olarak ekle

Android Studio'da JDK yerine JRE kullanıp kullanmadığınızı nasıl kontrol edersiniz ve bunu nasıl değiştirirsiniz?
sbearben

Android Studio ile aynı sorunu yaşıyorum. Başarılı olan oldu mu?
Ajay Thomas

Gömülü JRE'den JDK 14'e değiştirildi ve çalıştı.
Abhimanyu

3

Sorun: PowerMock + Mockito + TestNG + PowerMockTestCase

Herhangi birine yardımcı olması durumunda sorunumu / çözümümü paylaşmak.

Bağımlılıklarımın hepsi doğru bir şekilde işaret edildi:

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'

Ama yine de şu hatayı alıyorum:

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)

Benim testim şöyle bir şeydi:

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

Bu iş parçacığında belirtildiği gibi, initMocks()yöntemin kaldırılması hatayı ortadan kaldırır, ancak tüm taklitler boş olur.


✅ Çözüm: BeforeTest VS BeforeMethod

Davam için öğrendiğim @BeforeTestşey aslında bir sorun teşkil ediyordu. @BeforeMethodHatayı çözmek için onu değiştirmek .

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

Tahminimce fasulye enjeksiyonu ile ilgili bir şey; @BeforeTestFasulye enjekte edilmeden önce yürütülürken @BeforeMethod, fasulye enjeksiyonundan sonra yürütülür. Yine de nasıl etkilediğinden emin değilim.


1

Benim durumumda, maven inşa sistemini kullanmayan bir proje üzerinde çalışıyordum. Bu benim için işe yarayan şeydi.

NB: (kitaplığı oluşturmak isteğe bağlıdır, kavanozları doğrudan proje oluşturma yolunuza ekleyebilirsiniz)

Umarım bu birine yardımcı olur.


1

Hatada görünen maven veri havuzu yolundan "byte-buddy-1.7.11.jar" dosyasını manuel olarak silin. Maven projeyi günceller ve sorun çözülecektir. Benim için denedi ve çalıştı.


1

Mockito 2, bağımlılıklar gerektirir. Aşağıdaki iki ByteBuddy bağımlılığı ekleniyor. sorunu benim için çözdü:

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

Benim durumumda, projeye şu adreste bulunabilecek jar dosyalarını dahil ediyorum: https://bintray.com/raphw/maven/ByteBuddy/

Bir Maven projesi için buna ihtiyacınız varsa, eklemeniz yeterlidir:

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

1

Benim için sorun IntelliJ'in testi entegrasyon testi olarak çalıştırmasıydı. Bu yüzden manuel olarak JUnit testi oluşturmam gerekiyordu

görüntü açıklamasını buraya girin


0

benim durumumda, bazı anormal env ayarları da bu hataya yol açacaktır:

ubuntu 16.04'te, java ve javac güncelleme alternatifleri 7'ye yükseltildi, ancak $ JAVA_HOME yanlış bir şekilde 8 olarak ayarlandı

$ JAVA_HOME'u kaldırdım ve her şey normale döndü


0

Buna bir bnd yönü eklemek

Üzerine ekleme Paskas' cevabı , aynı zamanda içinde bağımlılıklar dahil etmek zorunda cnf maven depo, (Yerim gibi birini kullanıyorsanız 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

ve uygun referanslama için, bir bnd değişkeni ekleyebilirsiniz. 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

ve projenizin bnd dosyasında

-testpath:\
    ${mockito}

0

Mevcut bir projede aynı sorunu yaşadım. Java 8 kullandım ve ek olarak java 10 kurdum. Böylece bu istisnayı almaya başladım. Java 10'u kaldırdım, yardımcı olmadı. Bytebuddy kavanozlarını maven deposundan sildim, yardımcı olmadı. Ancak tüm kavanozları maven deposundan tamamen kaldırdıktan sonra projeyi yeniden derleyebildim.


0

Sürüm bildirimini kaldır benim için çalışıyor:

Misal:

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

2.8.9 kaldır

Sonra:

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

Bu bağımlılığın jar paketleri arasındaki sürüm sorunundan kaynaklanıyor olabilir.


Sürümü kesinlikle miras alıyorsunuz çünkü kaldırmak projeyi bozacaktır. Yanlış çok yanlış cevap.
eduyayo

0

Netbeans kullandığı için orijinal posterin cevabı değil, ama Eclipse'de testlerin tekrar çalışabilmesi için "Maven -> Update Project" yapmam gerekiyordu.



0

Maven için POM XML'deki jmockit'i kaldırarak bu sorunu çözdüm. Bundan sonra Junit 5 testlerim mükemmel çalışıyor.

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

Bu bağımlılıkla her zaman aşağıdaki gibi bir hata alıyorum:

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 bağımlılığını powermock ve springboot'unuzdaki sürüm olarak açıkça tanımlayın testCompile group: 'org.mockito', name: 'mockito-core', version: '2.8.9'


0

Mockito için bağımlılığım androidTestImplementation altındaydı ve testImplementation altında değildi.

Mockito'yu birim testlerimle kullanmaya çalıştığımda da aynı hatayı aldım. Tek yapmam gereken bağımlılığı eklemek oldu.


0

Benim durumumda, kaldırdıktan sonra mockito-coretest işe yaradı!

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

Benim versiyonum burada ve JDK 1.8.0_121.

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

Şimdi bağımlılıklarım:

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

-1

Java 10 ve Spring Boot 2'ye geçerken aynı istisnayı yaşadım . Bu bağımlılık kombinasyonu benim için çalıştı:

    <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

Aynı sorunu yaşadım ve @ Paskas'ın çözümünü denedim, ilk başta Junit Test iyi çalıştı. bytebuddy bağımlılığını pom.xml dosyama ekledi:

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

Bu yardımcı olur umarım.


-2

En son sürümüne güncellemeniz yeterli org.mockito:mockito-core. Bir kez yaptım, hatalar kayboldu!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.