Метод mockK, возвращающий интерфейс Future

Здравствуйте, у меня есть следующая проблема. Я пытаюсь смоделировать вызов внедренного исполнителя для немедленного выполнения данного Callable. Позже в тесте приводятся аргументы методов, вызываемых внутри Callable, и утверждаются аргументы. Ложный пример см. Ниже.

Maven 3, JDK 10-Slim, Mockk 1,9

    //this task should be executed by executor
    private val taskCaptor = slot<Callable<Boolean>>()
    private val asyncTaskExecutor: LazyTraceThreadPoolTaskExecutor = mockk<LazyTraceThreadPoolTaskExecutor>().apply {
        //this was my 1st try, but resutt was java.lang.InstantiationError: java.util.concurrent.Callable
        //every { submit(capture(taskCaptor)) } returns CompletableFuture.completedFuture(taskCaptor.captured.call())
        //every { submit(any()) } returns CompletableFuture.completedFuture(true)
        every { submit(ofType(Callable::class)) } returns FutureTask<Boolean>(Callable { true })
    }

позже я изменил интерфейс Callable на реализацию, которую создал в тестируемом классе, и получил еще одно исключение. С тем же кодом, что и выше, исключения были

java.lang.InstantiationError: java.util.concurrent.Future

который является возвращаемым типом submit метод.

Мой подход к издевательству неправильный?

0 ответов

Не уверен, что это лучший способ реализации, но для меня это сработало так:

    private val taskCaptor = slot<Callable<Boolean>>()
    private val asyncTaskExecutor: LazyTraceThreadPoolTaskExecutor = mockk<LazyTraceThreadPoolTaskExecutor>().apply {
        every { submit(ofType(Callable::class)) } returns mockFuture
        every { mockFuture.get() } returns true

    }

Другие вопросы по тегам