Как высмеять функцию верхнего уровня в котлине с помощью jmockit

Предполагая, что у меня есть функция для тестирования ниже, объявите в файле с именем «Utils.kt»

//Utils.kt fun doSomething() = 1 

Затем мы создаем тестовый класс для его проверки

 //UtilsTest.kt @RunWith(JMockit::class) class UtilsTest { @Test fun testDoSomething() { object : Expectation() { init { doSomething() result = 2 } } assertEquals(2, doSomething()) } } 

Я хочу издеваться над doSomething , заставить его вернуть 2 , но это не сработает, фактический результат – 1

Существует ли какое-либо обходное решение для этой цели?

    UtilsKt решение издевается над ним на стороне Java, поскольку вы не можете ссылаться на класс UtilsKt из файлов Kotlin.

     @RunWith(JMockit.class) public final class UtilsFromJavaTest { @Test public final void testDoSomething(@Mocked @NotNull final UtilsKt mock) { new Expectations() { { UtilsKt.doSomething(); this.result = 2; } }; Assert.assertEquals(2, UtilsKt.doSomething()); } } 

    Благодаря @aristotll мы можем просто расширить обходное решение, чтобы сделать его более удобным в использовании.

    сначала объявите класс java, возвращающий класс UtilsKt

     //TopLevelFunctionClass.java public class TopLevelFunctionClass { public static Class<UtilsKt> getUtilsClass() { return UtilsKt.class } } 

    то, высмеивать этот класс в ожидании, используя частичный макет

     //UtilsTest.kt @RunWith(JMockit::class) class UtilsTest { @Test fun testDoSomething() { object : Expectation(TopLevelFunctionClass.getUtilsClass()) { init { doSomething() result = 2 } } assertEquals(2, doSomething()) } } 
    Intereting Posts
    Kotlin – Mockito не может издеваться / шпионить (Spring REST API) Чистое использование Coroutines в Котлине с поддержкой тестирования модулей Kotlin: 'val' по второму параметру конструктора не допускается Google Espresso: удалять данные пользователя по каждому тесту Выбрать свойство из каждого объекта в списке Джексон-десериализация – классы данных Kotlin – значения по умолчанию для отсутствующих полей на картографе Пользовательский Джерси ExceptionMapper весной Boot с kotlin Ошибка прокси-сервера REST клиента Kotlin Dagger2 + MVP на Котлине Как включить аутентификацию носителей в приложении Spring Boot? Каков правильный способ получения разрешений для намерений телефонных звонков Ошибка выполнения с помощью ListView в Android с Kotlin? Gradle kotlin-spring плагин не открывает весенние классы Котлин – вторичный конструктор, который отличается одним аргументом Зачем использовать разницу между объявлением и сайтом