Mocking context.getBeansWithType с использованием Mockk в Kotlin - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть Kotlin приложение с интеграцией Spring. Один из моих классов использует ApplicationContext.getBeansOfType. Вот мой класс.

@Service
class MyService(private val context: ApplicationContext) {

    private val beans: Set<MyClass>

    init {
       beans = context.getBeansOfType(MyClass::class.java).values.toSet()
    }

    fun get(data: MyData) = beans.map { bean -> bean.get(data) }.toSet()
}

Я пытаюсь написать модульный тест, используя Mockk, как показано ниже.

import io.mockk.every
import io.mockk.mockk

import org.springframework.context.ApplicationContext

import org.assertj.core.api.Assertions
import org.junit.Test

class MyServiceTest {

    var context: ApplicationContext

    var bean: MyClass

    var fixture: MyService

    init {
        context = mockk<ApplicationContext>()
        bean = mockk<MyClass>()

        every { context.getBeansOfType(MyClass::class.java) } returns mapOf("beanName" to bean)

        fixture = MyService(context)
    }

    @Test
    fun getPredictionsReturnsPredictions() {

        val data = MyData("A")

        val expected = setOf("data")

        every { bean.get(any<MyData>()) }.returns "data"

        val actual = fixture.get(data)

        Assertions.assertThat(actual).isEqualTo(expected)
    }
}

Однако мой тест не пройден сопоставить и вернуть смоделированный bean-компонент при вызове context.getBeansOfType.

Вот ошибка, которую я получаю.

[ERROR] test  Time elapsed: 0.286 s  <<< ERROR!
io.mockk.MockKException: 
Failed matching mocking signature for

left matchers: [any()]
    at com.example.MyServiceTest.test(MyServiceTest.kt:27)

Может кто-нибудь подсказать, что я делаю здесь неправильно?

...