Библиотеки Mockito и других библиотек Kotlin обеспечивают частичную проверку или аналогичную функциональность.Вы можете указать реальные методы для вызова, в то время как другие методы остаются заглушками:
Пример Java-мокито:
A classUnderTest = mock(A.class);
when(classUnderTest.a()).thenCallRealMethod();
classUnderTest.a();
verify(classUnderTest).b()
См. Mockito Документация о частичной имитации.Частичная имитация не приветствуется, потому что она не подходит для хорошего дизайна ООП, но в вашем случае она соответствует своему прямому назначению, которое заключается в тестировании сложного унаследованного кода.
Пример Kotlin с ванильным Mockito:
val classUnderTest = mock(A::class.java)
`when`(classUnderTest.a()).thenCallRealMethod()
classUnderTest.a()
verify(classUnderTest).b()
mockito-kotlin предоставляет расширения, позволяющие использовать mockito более идиоматическим образом.К сожалению, кажется, что нет способа сделать частичное издевательство идиоматическим способом kotlin, но это может быть достигнуто в mockito-kotlin следующим образом:
val classUnderTest = mock<A>()
doCallRealMethod().whenever(classUnderTest).a()
classUnderTest.a()
verify(classUnderTest).b()
MockK , идиоматическийБиблиотека насмешек kotlin, позволяет использовать эту функцию с помощью spys.После создания spy
класса вы можете выбрать методы-заглушки:
val classUnderTest = spyk<A>()
every { classUnderTest.b() } returns 1L
classUnderTest.a()
verify { classUnderTest.b() }