Исключение при использовании Mockito с Java11 - PullRequest
1 голос
/ 27 января 2020

Мы обновляемся с Java 8 до 11. После внесения всех необходимых изменений в SDK я начал запускать наши модульные тесты, используя maven. Все тесты, которые используют Mockito, терпят неудачу с

java.lang.ClassCastException: 
class org.mockito.codegenEventapiManager$MockitoMock$1091821173 cannot be cast to class
org.mockito.internal.creation.bytebuddy.MockAccess
(org.mockito.codegenEventapiManager$MockitoMock$1091821173 is in unnamed module of loader
org.powermock.core.classloader.javassist.JavassistMockClassLoader @1473b8c0;
org.mockito.internal.creation.bytebuddy.MockAccess is in unnamed module of loader 'app')
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:48)
    at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:25)
    at org.powermock.api.mockito.mockmaker.PowerMockMaker.createMock(PowerMockMaker.java:41)
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35)
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)
    at org.mockito.Mockito.mock(Mockito.java:1896)
    at org.mockito.Mockito.mock(Mockito.java:1805)
    [...line where we cal Mockito, rest is ommitted]

Может ли это быть связано с несовпадением номера версии в некоторых из зависимостей?

Мы используем

mockito-core 2.24.0, excluding byte-buddy, byte-buddy-agent and objenesis
powermock-module-testng 2.0.4 (excluding above)
powermock-api-mockito2 2.0.4
objenesis 3.1
byte-buddy 1.9.7
byte-buddy-agent 1.9.7

Насмешка над классом проста:

EventapiManager mockManager = Mockito.mock(EventapiManager.class);

Сам по себе смоделированный класс - publi c, и все работает нормально на Java 8.

1 Ответ

1 голос
/ 28 января 2020

Я решил свою проблему неожиданным образом: во время поиска решений я наткнулся на этот комментарий, в котором описывается еще один неудачный тест, который я прошел. В этом тестовом приспособлении мы действительно используем аннотацию PowerMock, описанную в комментарии, но там не было предложено ни одного из игнорируемых пакетов. Поэтому я добавил их, составив полный список игнорируемых пакетов:

@PowerMockIgnore({"javax.management.*", "javax.script.*", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"})

Это таинственным образом разрешило ВСЕ сбои, в том числе описанные выше, которые имели свое устройство в другом пакете.

...