MockK

MockK는 코틀린을 위한 Mock 프레임워크 자바의 Mockito와 유사해서 쉽게 적응이 가능하다.


Mockk 사용하기

모의 객체 생성

// 1. mockk<타입>()
private val mockValidator1 = mockk<CreationValidator>()

// 2. 타입 추론
private val mockValidator2 : CreationValidator = mockk()

mockk 함수는 타입 파라미터를 이용해서 생성할 모의 객체의 타입을 전달 받는다

위 예시처럼 타입을 선언할 때 명시해주면 타입 추론이 가능하다.

Answer 정의

@Test
fun someMockTest() {
    every { mock.someMethod(1) } returns "OK" // "OK" 리턴
    every { mock.someMethod(2) } throws SomeException() // 익셉션 발생
    every { mock.call() } just Runs // Unit 함수 실행
    
    assertEquals("OK", mock.someMethod(1))
    assertThrows<SomeException> { mock.someMethod(2) }
}

모의 객체를 생성해준뒤 **every 함수를 이용해서 모의 객체의 동작 방식을 정의**한다.


Relaxed Mock

MockK는 호출 대상에 대한 스텁 정의를 하지 않으면 오류가 발생한다.

해결 방법은 mockk 함수의 인자에 relaxed = true를 넘겨서 relaxed mock을 만들면 된다.