Я использую Powermockito, чтобы высмеивать и шпионить за стати c классов. Версия: 2.0.4
Также используется mockito-core версия 3.0.0 . В одном из моих проектов я могу использовать mockStati c, включив mock-maker-inline, как указано здесь https://github.com/powermock/powermock-examples-maven/blob/master/mockito2/src/test/resources/org/powermock/extensions/configuration.properties
Но, когда я попробовал такой же подход на своем другой проект, в котором обнаружена следующая ошибка:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.ghx.tpm.api.ISubscribedProductParameterService]: Factory method 'subscribedProductParameterService' threw exception; nested exception is java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
Caused by: java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@614aeccc
Caused by: java.lang.IllegalStateException: Failed to load MockMaker implementation: mock-maker-inline
Caused by: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker
Caused by: org.mockito.exceptions.base.MockitoInitializationException:
Could not initialize inline Byte Buddy mock maker. (This mock maker is not supported on Android.)
Java : 1.8
JVM vendor name : Oracle Corporation
JVM vendor version : 25.161-b12
JVM name : Java HotSpot(TM) 64-Bit Server VM
JVM version : 1.8.0_161-b12
JVM info : mixed mode
OS name : Linux
OS version : 4.4.0-166-generic
Caused by: java.lang.IllegalStateException: Error during attachment using: net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Compound@3c89bb12
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
Не могли бы вы помочь в решении этой проблемы?
Дополнительные сведения:
- Я шучу над классом шпионов c.
- jar byte-buddy. Разрешенная версия зависимости 1.9.10
- будет перекрывать mockito2, а powermock-api-mockito2 вызовет проблемы при загрузке MockMaker. ? как их решить?
- Если тест выполняется в IDE, он работает нормально. но не работает при запуске в консоли maven.
Дополнительные выводы: Гарантированный JavassistMockClassLoader используется путем добавления @PrepareForTest и PowerMockRunner (поскольку один из моих других проектов работал с такой же конфигурацией)
Указатель на нулевой указатель исключения Исключение именно в этой строке:
ByteBuddyAgent.java (private static void install(AttachmentProvider attachmentProvider, String processId, String argument, AgentProvider agentProvider)
Attacher.install(attachmentAccessor.getVirtualMachineType(), processId, agentProvider.resolve().getAbsolutePath(), argument);
Classloader во время сбоя - AppLaunchClassLoader. (Тогда как для рабочего проекта это URLClassLoader). Не уверен, что это различие может быть причиной.
Обновление 2:
- @ PowerMockRule -> Это аннотирование инициализирует агент JVM один раз
- Во время вызова Mockito.mock он пытается загрузить встроенный mock-maker-inline, который в свою очередь загружает агента в JVM. Это вызовет какие-либо проблемы? Я считаю, что метод VirtualMachine.attach () вызывается дважды. Не уверен, что это вызовет какие-либо проблемы.
Eclipse IDE загружает mock-maker-inline через tools.jar (работает нормально в IDE) Командная строка Maven загружает mock-maker-inline через powermock -module-javaagent (сбой с ошибкой инициализации). - Есть предложения заставить консоль maven подобрать инициализацию mock-maker-inline с помощью tools.jar?
Обновление 3: Я пошел на минималистичный подход c. Удалены все Spring-бегуны, создания Bean-компонентов, конфигурации контекста. Просто сохранил PowerMockRunner + stati c макет UUID.randomUUID () + Sysout .
Still сталкивается с ошибкой инициализации mock-maker-inline. чувствую себя очень странно !! та же конфигурация работает на моем другом проекте в том же рабочем пространстве!