Как добиться @Capturing как поведение в MockK? - PullRequest
0 голосов
/ 02 сентября 2018

У нас есть модуль приложения Spring, протестированный с использованием фреймворка JMockit. Теперь мы хотели бы написать новые тесты в Kotlin, используя MockK. Кажется, что почти все работает нормально, но мы не можем понять, как насмехаться над бобами, автоматически подключенными Spring. В JMockit мы использовали аннотацию @Capturing, которая расширяла макетирование и для классов, реализующих макетированный интерфейс. Как мне добиться подобного поведения макета в фреймворке MockK?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

В документации Spring рекомендуется, чтобы все ваши компоненты были автоматически подключены через конструктор. Если вы будете следовать этому соглашению, у вас не будет этой проблемы.

Точнее, рекомендация следующая ...

@RestController
class SomeRandomController(
        @Autowired private val ARepository: aRepository,
        @Autowired private val BRepository: bRepository,
        @Autowired private val CRepository: cRepository
){ etc ...}

Тогда в вашем тесте вам понадобятся следующие строки:

val aRepository = mockk<ARepository>(relaxed = true)
val bRepository = mockk<BRepository>(relaxed = true)
val cRepository  = mockk<CRepository>(relaxed = true)

val controller = SomeRandomController(aRepository, bRepository, cRepository)
0 голосов
/ 06 сентября 2018

Приведение oleksiyp комментариев к ответу


В настоящее время Мокк не имеет такого поведения. Его поддержка Spring ограничена, но есть обходной путь, использующий сам Spring:

Вы можете создать bean, как хотите, даже в интеграционных тестах. При создании компонента вы можете создать макет:

@Bean
fun bean(): BeanType = mockk()

Затем, когда этот bean-компонент будет автоматически подключен, он вернет имитированный экземпляр, и вы сможете настроить его поведение, используя DSL Mockk как обычно.

...