У меня есть 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)
Может кто-нибудь подсказать, что я делаю здесь неправильно?