Как высмеять финальный класс с Mockito 2 на Java-модуле в Android-проекте?

У меня есть проект чистой архитектуры Android, написанный в Котлине с тремя модулями:

  • данные (Android-библиотека)
  • domaine (библиотека Java)
  • презентация (приложение для Android)

Каждый из 3 модулей имеет модульные тесты, написанные с помощью junit . Но с Kotlin каждый класс по умолчанию является окончательным. У меня быстро возникла проблема: как насмехаться с окончательным классом с mockito

Теперь это возможно с Mockito 2

Это можно сделать с помощью механизма расширения mockito, создав файл /mockito-extensions/org.mockito.plugins.MockMaker содержащий одну строку:

 mock-maker-inline 

Это решение очень хорошо работает на модуле данных (Android Library) и модуле презентации (приложение для Android), но не работает на моем доменном модуле (Java Library) .

Я знаю, что этот вопрос уже задан ( как издеваться над финальным классом с mockito , Mock-объектами, вызывающими статические методы конечных классов с помощью Mockito ), но я не нашел ответ, который я ищу.

Вы можете использовать встроенный метод издевательства по умолчанию, изменив зависимость Gradle от обычной зависимости Mockito:

 compile "org.mockito:mockito-core:$mockito_version" 

… к следующему:

 compile "org.mockito:mockito-inline:$mockito_version" 

Таким образом, вам не придется полагаться на активацию встроенного издевательства над методом «файл в папке с ресурсами», который иногда я обнаружил, что иногда он взломан.

Mockito MockMaker может использоваться только для модульных тестов (запускается на JVM). Для тех, кто испытывает проблемы с издевательскими классами Kotlin в инструментальных тестах (androidTest), попробуйте использовать библиотеку DexOpener . Это делает классы, свойства и методы Kotlin open , что позволяет их издеваться.

Intereting Posts
Весна 5 и Котлин 1.1 Корутинцы: Тип rx.Седулер отсутствует Можно ли использовать Котлин в Граале? Как получить различную реализацию функции верхнего уровня в Unit и InstrumentTests для Android «Тип свойства не является подтипом переопределенного абстрактного значения val» в многонаследованном поле Kotlin с JPA / Hibernate: без ленивой загрузки без `open`? Как определить, является ли объект унаследованным от определенного класса в Котлине? Не удалось выполнить проверку: сбой инструментария из-за «kotlin.UninitializedPropertyAccessException» Могу ли я интегрировать и использовать рекламные объявления admob в проекте Android с помощью Kotlin? Использование функции «с» Плагин JaCoCo Gradle сообщает об уровне покрытия, равном 0,0, для каждой упаковки как управлять потоком данных, используя, когда правильно в котлин RXJava – concat не работает MutableLiveData с многократным укладом Kotlin Generic не работает Особенность Kotlin `typealias` Как создать перечисление из строки в Котлин?