티스토리 뷰

반응형

mockito-kotlin

https://github.com/mockito/mockito-kotlin

 

GitHub - mockito/mockito-kotlin: Using Mockito with Kotlin

Using Mockito with Kotlin. Contribute to mockito/mockito-kotlin development by creating an account on GitHub.

github.com

mockito-kotlin란 kotlin언어로 mockito를 사용하기 쉽게 헬퍼 함수(helper function)을 제공해주는 라이브러리 입니다.

기존 mockito가 Java언어를 타겟으로 만들어졌기 때문에 kotlin언어의 특성을 십분 활용할 수 없는데 mockito-kotlin 라이브러리는 이러한 부족함을 채워줍니다.

 

이전 글에서 mokito에 대해 공부를 해 보았으니 이번 글은 mockito-kotlin가 기존 mockito와 다른점을 중점으로 공부해보겠습니다.

만약 mockito에 대한 내용이 필요하다면 이전글인 Mockito 톺아보기를 보고 오시는걸 추천드립니다.

 

테스트 코드 공부 시리즈

1. AssertJ를 이용한 테스트 코드 작성

2. JUnit의 Parameterized 어노테이션 사용하기

3. Spring AutoConfigure Annotation Test

4. Mockito 톺아보기

5. kotlin에 특화된 mockito-kotlin 사용하기

6. postman을 이용한 시나리오 테스트 하기

 

 

Mock


mock 객체 생성

mock 객체를 생성하기 전에 이번 글에서 예시로 사용할 User 객체를 정의

 

User 객체

class User {
    fun checkLogin(password: String): Boolean {
        return true
    }

    fun getName(id: Int): String {
        return "charlie"
    }
}

 

mock 객체 생성

// 타입 추론이 가능한 경우 
val mock: User = mock()

// 타입을 직접 명시해주는 방법
val mock = mock<User>()

 

 

Stub


mockito-kotlin은 when() 메서드 대신에 whenever() 메서드를 제공한다.

whenever(mock.getName(1)).thenReturn("userA")

 

추가로 람다 표현식을 이용하면 mock객체를 생성할때 Stubbing도 바로 가능하다.

val mock = mock<User> {
    on { getName(1) }.doReturn("userA")
    on { getName(2) } doReturn "userB" //kotlin infix function 사용
}
람다 표현식을 사용하게 되면 doReturn을 사용해야 합니다.
thenReturn을 이용하고 싶은경우에는 whenever() 메서드를 이용해야 합니다.

 

 

Verifying


기본 검증

val mock = mock<User> {
    on { getName(1) } doReturn "userA"
}

mock.getName(1)
verify(mock).getName(1)

 

 

Argument Matchers

argument matchers로 파라미터 검증하기

val mock = mock<User> {
    on { getName(1) } doReturn "userA"
}
mock.getName(1)

verify(mock).getName(argThat { argument -> argument == 1 } )

argThat 는 argument를 람다 인수로 받아 오므로 람다 표현식을 통해 argument를 검증이 가능하다.

 

 

단건이 아닌 다수의 검증이 필요할때

val mock = mock<User> {
    on { checkLogin("abc") } doReturn false
}
mock.checkLogin("abc")

// check 를 이용하면 하나의 argument를 다양하게 검증이 가능하다.
verify(mock).checkLogin(org.mockito.kotlin.check {
    assertThat(it.length).isEqualTo(3)
    assertThat(it).isEqualTo("abc")
})

 

Argument Captors

argument capturing은 검증시에 사용하는 값을 검증하기 위한 목적으로 사용한다.

val mock = mock<User> {
    on { checkLogin("abc") } doReturn false
}
mock.checkLogin("abc")

argumentCaptor<String>().apply {
    verify(mock).checkLogin(capture())

    assertThat(firstValue).isEqualTo("abc")
    assertThat(firstValue.length).isEqualTo(3)
}

mockito-kotlin 에서는 argumentCaptor 선언과 capture()를 한번에 작성이 가능해 깔끔한 테스트 코드 작성이 가능하다.

 

 

마무리

mockito-kotlin을 사용하면 kotlin 문법들을 편하게 사용할 수 있어 코드를 좀 더 깔끔하게 작성할 수 있습니다.

또한 kotlin는 Java를 완전 상호작용하기 때문에 mockito의 기능들도 그대로 사용할 수 있어 kotlin, mockito 라이브러리를 동시에 사용한다면 mockito-kotlin또한 사용하지 않을 이유가 없을거 같습니다.

 

추가로 mockito-kotlin을 이용하면 미연에 발생할 수 있는 NullPointerException과 같은 에러도 예방할 수 있는 점이 장점입니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함