во время тестов 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). Как я могу решить проблему. Любое предложение/помощь высоко ценится.
Привет @Feelfree: обновлен вопрос с подробностями. Спасибо
У вас есть класс dsexecutor и метод с именем readTableDataAsJson. Я не вижу этого в тесте. И где вы определяете или имитируете dataConfig?
Привет @Feelfree: сейчас я обновил код фактическими данными. Я не издевался над dataConfig. Я новичок в Junit и Mockito и изучаю их основы.
Пожалуйста, проверьте эту ссылку stackoverflow.com/questions/64580745/…. В большинстве случаев это может быть проблема с зависимостями.
Мокито версия?
@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>
Почему вы смешиваете относительно новую версию Mockito с бета-версией 2.0.2 от 2015 года. Ей почти 10 лет. «mockito-junit-jupiter» транзитивно извлекает «mockito-core», это все, что вам нужно. Избавьтесь от Mockito-all и повторите попытку. Если вы используете ide, убедитесь, что он извлекает изменения. И, наконец, вы должны использовать область тестирования для своих тестовых зависимостей.
@Lesiak: большое спасибо, удаление зависимости устранило ошибку. Но при запуске Junit нет результата (пройден/не пройден). Странно. Я добавил скриншот к вопросу
К сожалению, у меня нет доступа к изображениям сообщений: Результат теста примерно такой: Завершено через 0,118 секунды. Запусков: 0/0 Ошибок: 0 Сбоев: 0
Напишите, пожалуйста: 1. Импорт в тестовом классе. 2. Зависимость Junit в пом. 3. Весь тестовый результат. Вы можете отредактировать свой вопрос или добавить новый.
Привет @Lesiak: отредактировал вопрос, добавив подробности.
добавил <scope>test</scope> в зависимость junit и протестировал, те же результаты.
В ваших зависимостях и импорте есть некоторый беспорядок. В ваших зависимостях есть как junit4, так и junit5. Выберите только один (junit5, если у вас нет веской причины не делать этого). Используйте импорт jUnit5. Убедитесь, что у вас есть junit-jupiter-engine, не только junit-jupiter-api
@Lesiak: удалена зависимость junit 4, добавлен junit-jupiter-engine. Получение ответа сейчас: java.util.NoSuchElementException Добавлено в вопрос
Ваша первоначальная проблема решена - я добавил ответ. Теперь ваша проблема в Driver Manager.getConnection - это статический вызов, который не заглушен в тесте. Если вы хотите пойти по издевательскому пути, я предлагаю вместо этого выполнить рефакторинг вашего кода, чтобы использовать DataSource (переданный в конструктор). Обычно использование реальной базы данных (встроенной или в докер-контейнере на вашем компьютере) в тестировании предпочтительнее, чем имитация, но я не знаю, что предлагает Databricks. Это заслуживает нового вопроса, специфичного для databrics.




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