Метод 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
}