Kotlin Version Support

Mockk는 Kotlin 1.10.0~ 1.2를 지원하지 않습니다

JUnit 5

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 ...
}

SpyK

스파이를 사용하면 모의 객체와 실제 객체를 혼합할 수 있습니다.

val car = spyk(Car()) // or spyk<Car>() call the default constructor

car.drive(Direction.NORTH)

verify { car.drive(Direction.NORTH) }

confirmVerified(car)

Relaxed mock

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()