Mockk는 Kotlin 1.10.0~ 1.2를 지원하지 않습니다
JUnit 5 에서는 MockExtension 모의 객체를 초기화 하는데 사용할 수있습니다.
@ExtendWith(MockExtension::class)
class CarTest {
@MockK
lateinit var car1: Car
@RelaxedMockK
lateinit var cae2: Car
@MockK(relaxUnitFun = true)
lateinit var car3: Car
@SpyK
var car4 = Car()
@Test
fun calculateAddsValues1() {
// .. use...
}
}
또한 파라미터를 통해 사용 가능합니다
@Test
fun calculateAddsValues1(@MockK car1: Car, @RelaxedMockK car2: Car) {
// use ...
}
스파이를 사용하면 모의 객체와 실제 객체를 혼합할 수 있습니다.
val car = spyk(Car()) // or spyk<Car>() call the default constructor
car.drive(Direction.NORTH)
verify { car.drive(Direction.NORTH) }
confirmVerified(car)
relaxed mock은 모든 함수에 대해 간단한 값을 반화하는 모의 객체입니다. 이렇게 하면 각 경우에 대한 동작 지정을 건너뛰면서 필요한 것을 계속 스텁할 수 있습니다. 참조 유형의 경우 연결된 모의 객체가 반환됩니다
val car = mockk<Car>(relaxed = true)
car.drive(Direction.NORTH)
verify { car.drive(Direction.NORTH) }
confirmVerified(car)
참고 : Relaxed Mock은 일반 반환 유형에서 제대로 동작하지 않습니다.(?) 이 경우 ClassCastException이 발생합니다. 이러한 경우 수동으로 스텁을 선택하십시오
val func = mockk<() -> Car>(relaxed = true)
every { func() } returns Car()
func()