Не удалось инициализировать плагин: interface 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, затем выбрал «Тестовые библиотеки» -> «Добавить Jar» и добавил mockito-core-2.7.0.jar.

Путь к классам и все выглядит нормально, я все еще получаю исключение.

Любой совет?

Паскас
источник
1
Проверьте решение на stackoverflow.com/a/41964561/4903889
AskQ
Обновление до более новой версии Mockito помогло мне решить эту проблему.
Йогеш Патил
Очистка кеша Gradle и загрузка всех зависимостей с нуля исправили это для меня. (См .: stackoverflow.com/a/13567793/4568679 для очистки кеша)
Slav

Ответы:

98

Если вы используете powermock, убедитесь, что ваши зависимости указывают на:

org.powermock:powermock-api-mockito2

вместо того

org.powermock:powermock-api-mockito
Addev
источник
1
Я пока не знаю точной причины, но этот ответ помог мне, когда мои тесты не удались после обновления Spring версии 1.5.14-RELEASE до 2.0.4-RELEASE
Кенни
1
Вопрос не имеет отношения к powermock. Проблема возникает, когда вы используете jre вместо jdk.
Лукаш
15
Я не использую PowerMock
Игорь
48

Отсутствует ссылка на:

  • байт-приятель-1.6.5.jar
  • байт-приятель-агент-1.6.5.jar
  • objenesis-2.5.jar

Начиная с бета-версии Mockito 2.0.2, у Mockito-core есть зависимости.

Паскас
источник
7
эти библиотеки включены по умолчанию, это не решение
Эдуардо
Я могу подтвердить, что добавление последних JAR-файлов byte-budy (и, что более вероятно, byte-buddy-agent) в "последний лучший" справочник по установке mockito. Для меня исключение из вопроса появилось после включения "насмешки над финальными" классами с mockito 2.
GhostCat
1
это транзитивные зависимости, вам не нужно добавлять их явно.
Лукаш
Для mockito 2.25.1вас нужно только objenesis-3.0.1.jarи byte-buddy-1.9.12.jar.
user1485864
thease deps также перечислены на странице maven внизу страницы. В том числе решить проблему.
Davide
13

У меня был Byte Buddy в пути к классам (это переходная версия Mockito 2.8.9), и все равно было исключение. Причина для меня заключалась в том, что я запускал модульные тесты с JRE вместо JDK. У меня сработал переход на JDK.

Стефано Л
источник
1
Как ты это изменил?
Таранмит Сингх
2
@TaranmeetSingh, если вы работаете с Android Studio, перейдите в Файл> Структура проекта> Местоположение SDK и проверьте правильность путей к вашему JDK. (Вам нужно будет загрузить JDK, если вы еще этого не сделали с веб-сайта Oracle.)
Лидия Ральф
Привет, @LydiaRalph, спасибо за предложение, на самом деле у меня была совсем другая проблема. Я писал примеры модульных тестов для одного из модулей (которые также являются автономными проектами студии Android), но вместо этого я открыл весь проект в студии Android. Переход на автономный проект решил эту проблему для меня.
Таранмит Сингх
@Stefano, как переключаться , как я не упомянул какую - либо где с помощью JDK или JRE
Tarun
Это исправило это для меня. Я только что удалил JRE из среды выполнения Java Eclipse, оставив только JDK.
Гийом Ф.
6

У меня была такая же проблема - в моем журнале появилась такая же трассировка стека. Обычно это проблема с настройкой проекта ... ИЛИ
Проблема может быть в JAR-файлах bytebuddys, если они не были правильно загружены.
Когда я пытаюсь проверить класс ClassLoadingStrategy вручную , то я получаю зип ошибки.

В этом случае достаточно вручную удалить Byte Buddy из локального каталога maven, обычно расположенного по адресу:
{home} /. M2 / repository / net / bytebuddy /

При следующей попытке запустить проект или тест они будут снова загружены и должны работать как и ожидалось.

К сожалению, распространенный Java ClassLoader сталкивается с таким же образом, когда класс или jar отсутствуют, а также jar поврежден.

vdou
источник
Есть еще одна возможность: Hibernate также имеет net.bytebuddy*зависимость, поэтому зависимости могут конфликтовать друг с другом.
ruzenhack
5

Эта проблема с Mockito2 возникает, если вы включите опцию имитации финальных классов.

Это означает, что в каталоге test / resources / mockito-extensions у вас есть файл org.mockito.plugins.MockMaker со следующим содержимым mock-maker-inline .

В этом случае byte-buddy, которая является транзитивной зависимостью для mockito-core, сталкивается с проблемой присоединения собственного агента к процессу java. Но проблема возникает только при использовании JRE.

Решение было бы либо:

  • Используйте JDK вместо JRE

или

  • добавить -javaagent:byte-buddy-agent-*.jarкак вариант ВМ
Лукаш Жешотарски
источник
Как в Android Studio проверить, используете ли вы JRE вместо JDK, и как бы вы это изменили?
sbearben 05
У меня такая же проблема с Android Studio. Кому-нибудь удалось?
Аджай Томас,
Изменился со встроенной JRE на JDK 14, и это сработало.
Абхиманью
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()метода устраняет ошибку, но все макеты становятся нулевыми.


✅ Решение: 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выполняется до того, как были введены какие-либо bean-компоненты, в то время @BeforeMethodкак выполняется после инъекции beans. Не знаю, как это на самом деле повлияло.

Эли
источник
1

В моем случае я работал над проектом, который не использует систему сборки maven. Вот что у меня сработало.

NB: (создание библиотеки необязательно, вы можете добавить jar-файлы непосредственно в путь сборки вашего проекта)

Надеюсь, это кому-то поможет.

Келли
источник
1

Удалите «byte-buddy-1.7.11.jar» вручную из пути к репозиторию maven, который указан в ошибке. Maven обновит проект, и проблема будет решена. Пробовал и работал у меня.

Арджун
источник
1

Mockito 2 требует наличия зависимостей. Добавление двух зависимостей ByteBuddy ниже. решил проблему для меня:

  • байт-приятель-xxxx.jar
  • байт-приятель-агент-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 вручную

введите описание изображения здесь

тонизирующие средства
источник
0

В моем случае к этой ошибке также приведет некоторая ненормальная настройка env:

в ubuntu 16.04 java и javac были альтернативами обновления 7, но для $ JAVA_HOME было ошибочно установлено значение 8

я удаляю $ JAVA_HOME, и все возвращается в нормальное состояние

cfz
источник
0

Добавляем к этому аспекту бэнд

В дополнение к ответу Паскаса вы также должны включить зависимости в репозиторий 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, не помогло. Я удалил банки bytebuddy из репозитория maven, это не помогло. Только после полного удаления всех jar-файлов из репозитория maven я смог снова скомпилировать проект.

Римский
источник
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 -> Обновить проект», чтобы тесты снова заработали.

Brimstedt
источник
0

Я столкнулся с этой проблемой и решил ее, обновив мою версию org.mockito.mockito-core до последней версии. Я довольно давно использовал старую версию.

Адиль Б
источник
0

Я решил эту проблему, удалив jmockit в POM XML для Maven. После этого мои тесты 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

Явно определите зависимость mockito, поскольку версия в вашем powermock и springboot отличается от группы testCompile: 'org.mockito', имя: 'mockito-core', версия: '2.8.9'

Аю
источник
0

Моя зависимость от mockito находилась под androidTestImplementation, а не под testImplementation.

Я получил ту же ошибку, когда попытался использовать 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
кьякья
источник
-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. добавила зависимость bytebuddy к моему pom.xml:

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

Надеюсь это поможет.

Юсеф Кесбауи
источник
-2

Просто обновите до последней версии org.mockito:mockito-core. Как только я это сделал, ошибки исчезли!

Хью Дэвис
источник