티스토리 뷰
mockito-kotlin
https://github.com/mockito/mockito-kotlin
mockito-kotlin란 kotlin언어로 mockito를 사용하기 쉽게 헬퍼 함수(helper function)을 제공해주는 라이브러리 입니다.
기존 mockito가 Java언어를 타겟으로 만들어졌기 때문에 kotlin언어의 특성을 십분 활용할 수 없는데 mockito-kotlin 라이브러리는 이러한 부족함을 채워줍니다.
이전 글에서 mokito에 대해 공부를 해 보았으니 이번 글은 mockito-kotlin가 기존 mockito와 다른점을 중점으로 공부해보겠습니다.
만약 mockito에 대한 내용이 필요하다면 이전글인 Mockito 톺아보기를 보고 오시는걸 추천드립니다.
테스트 코드 공부 시리즈
2. JUnit의 Parameterized 어노테이션 사용하기
3. Spring AutoConfigure Annotation Test
4. Mockito 톺아보기
5. kotlin에 특화된 mockito-kotlin 사용하기
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과 같은 에러도 예방할 수 있는 점이 장점입니다.
'Spring' 카테고리의 다른 글
[Spring Batch] 스프링 배치 메타 데이터 (0) | 2023.08.10 |
---|---|
[Test] postman을 이용한 시나리오 테스트 하기 (0) | 2023.07.12 |
[Test] Mockito 톺아보기 w.kotlin (0) | 2023.06.13 |
[Test] Spring AutoConfigure Annotation Test (0) | 2023.05.29 |
[Test] JUnit의 Parameterized 어노테이션 사용하기 (2) | 2023.05.22 |
- Total
- Today
- Yesterday
- scenario test
- mockK
- Spring Batch
- prinicipal
- assertj
- GSLB
- Spring
- asSequence
- AWS INDUSTRY WEEK
- spring data jpa
- trailing comma
- autoconfigure
- meta-data
- java
- Collection
- IntelliJ
- Stream
- 클린 아키텍처
- WrongTypeOfReturnValue
- test
- Parameterized
- ExitStatus
- JUnit5
- 시나리오 테스트
- A레코드
- Mockito
- BatchStatus
- kotlin
- datasource
- mockito-kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |