Kotlin Micronaut Mockk нет ответа найдено исключение - PullRequest
0 голосов
/ 05 февраля 2020

Я новичок в среде Micronaut и пытаюсь протестировать созданный мной демонстрационный пример.

Я сталкиваюсь с ошибкой io.mockk.MockKException: no answer found for: MathFacade(#3).computeAgain(3).

Мой код работает как таковой - MathService вызывает MathFacade. Я хочу проверить MathService, поэтому я высмеиваю MathFacade в своем MathServiceTest с намерением проверить только MathService.

Мой код такой, как показано ниже:

MathServiceTest

package io.micronaut.test.kotlintest

import io.kotlintest.specs.BehaviorSpec
import io.micronaut.test.annotation.MicronautTest
import io.micronaut.test.annotation.MockBean
import io.micronaut.test.extensions.kotlintest.MicronautKotlinTestExtension.getMock
import io.mockk.mockk
import io.mockk.every
import io.reactivex.Single
import kotlin.math.pow
import kotlin.math.roundToInt

@MicronautTest
class MathServiceTest(
        private val mathService: MathService,
        private val mathFacade: MathFacade
): BehaviorSpec({

    given("the math service") {

        `when`("the service is called with 3") {
            val mock = getMock(mathFacade)
            every { mock.computeAgain(any()) } answers {
                Single.just(firstArg<Int>().toDouble().pow(3).roundToInt())
            }
            val result = mathService.compute(2)
            then("the result is 9") {
                mathService.compute(3).test().assertResult(27)
            }
        }
    }
}) {

    @MockBean(MathFacade::class)
    fun mathFacade(): MathFacade {
        return mockk()
    }
}

MathService

package io.micronaut.test.kotlintest

import io.reactivex.Single
import javax.inject.Singleton

@Singleton
class MathService(private val mathFacade: MathFacade) {

    fun compute(num: Int): Single<Int> {
        return mathFacade.computeAgain(num)
    }
}

MathFacade

package io.micronaut.test.kotlintest

import io.reactivex.Single
import javax.inject.Singleton

@Singleton
class MathFacade() {
    fun computeAgain(num: Int): Single<Int>{
        return Single.just(num*4)
    }
}

Любая помощь будет оценена!

...