728x90
Kotlin에서 Mockito 대신 MockK를 사용하자
- Kotlin 표준 라이브러리와 호환되어 Kotlin 기능을 완전히 수행 할 수 있다
ㄴ Null-Safety, Extension Function, Coroutine, Data class - every { ... }와 같은 람다 식을 사용하여 목 객체의 동작을 설정
- Kotlin의 Inline Function 및 Inline Class 기능을 사용하여 런타임 오버헤드를 최소화하고,빠른 속도로 테스트가 가능하다
테스트 작성을 위해서는 spring-boot-starter-test 모듈을 불러와서 build.gradle.kts 에 추가해주면 된다.
dependencies {
testImplementation(kotlin("test"))
testImplementation("org.junit.jupiter", "junit-jupiter", "5.6.2")
testImplementation("io.mockk:mockk:1.12.5")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
@Test
fun simpleTest() {
// mockk 객체 생성
val car = mockk<Car>()
//메서드 Stubbing (가상동작정의)
every { car.drive(NORTH) } returns OK
//메서드 호출
car.drive(NORTH)
// 호출 검증 1번호출되었는지
verify(exactly = 1) { car.drive(NORTH) }
}
every { ... } 동작 정의
JAVA Mockito 에선
when(car.drive(NORTH)).thenReturn(OK);
으로 사용했다면
MockK 에선
every { car.drive(NORTH) } returns OK
으로 가상으로 동작을 정의해 줄 수 있다 (Stubbing)
verify { ... } 호출 검증
verify { memberRepository.save(any()) }
다양한 옵션이 있다.
- ordering 호출 순서
Ordering.UNORDERED - 호출순서무시 default
Ordering.ORDERED - inverse 부정 (verify는 기본적으로 성공적인 호출을 확인하는데 inverse는 호출되지 않은것을 확인한다. )
= false - default
= true - atLeast 최소 호출 횟수
- atMost 최대 호출 횟수
- exactly 호출 횟수 해당 메서드가 몇번 호출되어야 하는지 지정한다
= -1 default 특정 횟수에 대한 검증을 수행하지 않음을 의미 - timeout 타임아웃 (호출을 기다리는 시간을 지정 한다. 기본값은 0으로, 시간 초과 검증을 수행하지 않음을 의미한다.)
728x90
'개-발 > Java + Spring + Kotlin' 카테고리의 다른 글
[Spring] Java + Kotlin 멀티 모듈 프로젝트 만들기 (설정편) (0) | 2024.03.17 |
---|---|
[Java] CQRS 패턴 적용기 (Feat.Redis) (0) | 2024.03.07 |
[Spring Batch] addBatch로 다량 쿼리문 한번에 실행 (bulk insert) (0) | 2024.01.17 |
[JAVA] CountDownLatch 스레드 대기 시키기 (2) | 2024.01.05 |
[Spring] 선착순 이벤트 구현 ( 동시성 Pessimistic Lock) (3) | 2024.01.04 |