Невозможно издеваться над основным компонентом aem с помощью Mockito 3.8

#unit-testing #mockito #aem #junit5

Вопрос:

Я пытаюсь издеваться над классом тизера (публичный интерфейс), используя ядро mockito 3.8, и я не могу этого сделать.

У меня есть JAVA 11, и это следующая ошибка:

 org.mockito.exceptions.base.MockitoException: 
Mockito cannot mock this class: interface com.adobe.cq.wcm.core.components.models.Teaser.

Mockito can only mock non-private amp; non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.


Java               : 11
JVM vendor name    : Oracle Corporation
JVM vendor version : 11.0.12 8-LTS-237
JVM name           : Java HotSpot(TM) 64-Bit Server VM
JVM version        : 11.0.12 8-LTS-237
JVM info           : mixed mode
OS name            : Windows 10
OS version         : 10.0


Underlying exception : java.lang.IllegalStateException: Type not found: com.adobe.cq.wcm.core.components.internal.jackson.ComponentDataModelSerializer
 

Что здесь происходит?

Комментарии:

1. Это более или менее «не найденное классом»исключение. Это происходит из аннотации в интерфейсе компонента. Вам также понадобится uber-jar Adobe AEM в ваших зависимостях.

2. @AlexanderBerndt Я включил зависимость от uber-jar, но безуспешно… Я не понимаю, является ли это проблемой mockito или проблемой с основными компонентами wcm

3. Не уверен, в чем заключается эта ошибка, без небольшого сопутствующего кода и контекста этой ошибки… но если вы пытаетесь высмеять Модель Слинга, есть шанс, что Насмешки Слинга могут быть разумной альтернативой издевательствам.

4. Можете ли вы поделиться минимальным кодом, который позволяет воспроизвести проблему?

Ответ №1:

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

В итоге я добавил зависимость, но только для теста scope=.