Тест Junit с Mockito: ошибка ExceptionInInitializerError

во время тестов Junit я получаю следующую ошибку:

 java.lang.ExceptionInInitializerError
    at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
    at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
    at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
    at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117)
    at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109)
    at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105)
    at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70)
    at org.mockito.internal.creation.cglib.ClassImposterizer.createProxyClass(ClassImposterizer.java:95)
    at org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:57)
    at org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:49)
    at org.mockito.internal.creation.cglib.CglibMockMaker.createMock(CglibMockMaker.java:24)
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59)
    at org.mockito.Mockito.mock(Mockito.java:1284)
    at org.mockito.Mockito.mock(Mockito.java:1162)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6cc7b4de
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    at org.mockito.cglib.core.ReflectUtils$2.run(ReflectUtils.java:57)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at org.mockito.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:47)

Я попытался отладить проблему, но не смог идентифицировать проблему, поскольку код не работает на этапе ResultSet resultSet = Mockito.mock(ResultSet.class). Как я могу решить проблему. Любое предложение/помощь высоко ценится.

Привет! Пожалуйста, поделитесь кодом, который вы хотите протестировать, и протестируйте конфигурации классов.

Feel free 25.03.2024 13:05

Привет @Feelfree: обновлен вопрос с подробностями. Спасибо

User1515 25.03.2024 13:23

У вас есть класс dsexecutor и метод с именем readTableDataAsJson. Я не вижу этого в тесте. И где вы определяете или имитируете dataConfig?

Feel free 25.03.2024 13:49

Привет @Feelfree: сейчас я обновил код фактическими данными. Я не издевался над dataConfig. Я новичок в Junit и Mockito и изучаю их основы.

User1515 25.03.2024 14:18

Пожалуйста, проверьте эту ссылку stackoverflow.com/questions/64580745/…. В большинстве случаев это может быть проблема с зависимостями.

Feel free 25.03.2024 14:28

Мокито версия?

Lesiak 25.03.2024 19:42

@Lesiak: следующее: <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>2.0.2-beta</version> <groupId>org.mockito</groupId> <artifactId >mockito-junit-jupiter</artifactId> <version>5.11.0</version>

User1515 26.03.2024 08:08

Почему вы смешиваете относительно новую версию Mockito с бета-версией 2.0.2 от 2015 года. Ей почти 10 лет. «mockito-junit-jupiter» транзитивно извлекает «mockito-core», это все, что вам нужно. Избавьтесь от Mockito-all и повторите попытку. Если вы используете ide, убедитесь, что он извлекает изменения. И, наконец, вы должны использовать область тестирования для своих тестовых зависимостей.

Lesiak 27.03.2024 07:27

@Lesiak: большое спасибо, удаление зависимости устранило ошибку. Но при запуске Junit нет результата (пройден/не пройден). Странно. Я добавил скриншот к вопросу

User1515 27.03.2024 17:14

К сожалению, у меня нет доступа к изображениям сообщений: Результат теста примерно такой: Завершено через 0,118 секунды. Запусков: 0/0 Ошибок: 0 Сбоев: 0

User1515 27.03.2024 17:20

Напишите, пожалуйста: 1. Импорт в тестовом классе. 2. Зависимость Junit в пом. 3. Весь тестовый результат. Вы можете отредактировать свой вопрос или добавить новый.

Lesiak 27.03.2024 18:29

Привет @Lesiak: отредактировал вопрос, добавив подробности.

User1515 27.03.2024 18:45

добавил <scope>test</scope> в зависимость junit и протестировал, те же результаты.

User1515 27.03.2024 18:48

В ваших зависимостях и импорте есть некоторый беспорядок. В ваших зависимостях есть как junit4, так и junit5. Выберите только один (junit5, если у вас нет веской причины не делать этого). Используйте импорт jUnit5. Убедитесь, что у вас есть junit-jupiter-engine, не только junit-jupiter-api

Lesiak 27.03.2024 19:07

@Lesiak: удалена зависимость junit 4, добавлен junit-jupiter-engine. Получение ответа сейчас: java.util.NoSuchElementException Добавлено в вопрос

User1515 27.03.2024 19:49

Ваша первоначальная проблема решена - я добавил ответ. Теперь ваша проблема в Driver Manager.getConnection - это статический вызов, который не заглушен в тесте. Если вы хотите пойти по издевательскому пути, я предлагаю вместо этого выполнить рефакторинг вашего кода, чтобы использовать DataSource (переданный в конструктор). Обычно использование реальной базы данных (встроенной или в докер-контейнере на вашем компьютере) в тестировании предпочтительнее, чем имитация, но я не знаю, что предлагает Databricks. Это заслуживает нового вопроса, специфичного для databrics.

Lesiak 27.03.2024 22:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
16
209
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как обсуждалось в комментариях, проблема была вызвана удалением устаревшей версии Mockito - 2.0.2-бета от 2015 года, которой почти 10 лет.

Другие вопросы по теме