본문 바로가기
Java & Kotlin/Kotlin

[MockK] mock 객체가 호출되지 않았음을 검증하기

by devson 2022. 10. 21.

기능 개발을 하다보면 상태 값에 따라 특정 기능을 실행할지 말지 분기를 탈 필요가 있다.

 

class SomeService(
private val someFeature: SomeFeature,
) {
fun executeIfFlagIsOn(flag: Boolean) {
if (flag) {
this.someFeature.execute()
}
}
}
class SomeFeature {
fun execute() {}
}

위와 같이 SomeService#executeIfFlagIsOn 메서드는 flag 파라미터를 통해 SomeFeature기능을 실행할지 말지를 결정하는 코드가 있을 때,

MockK를 사용하여 SomeFeature의 기능이 실행되거나 안되었음을 테스트하기 위해서 wasNot(called: Called) infix function을 사용할 수 있다.

 

import io.kotest.core.spec.style.DescribeSpec
import io.mockk.called
import io.mockk.clearMocks
import io.mockk.mockk
import io.mockk.verify
class SomeServiceTest : DescribeSpec({
val someFeatureMock = mockk<SomeFeature>(relaxed = true)
val sut = SomeService(someFeature = someFeatureMock)
beforeTest {
clearMocks(someFeatureMock)
}
context("executeIfFlagIsOn method는") {
context("flag가 true인 경우") {
it("기능을 실행한다") {
// when
sut.executeIfFlagIsOn(flag = true)
// then
verify {
someFeatureMock.execute() // execute 메서드가 실행됨
}
}
}
context("falg가 false인 경우") {
it("기능을 실행하지 않는다") {
// when
sut.executeIfFlagIsOn(flag = false)
// then
verify {
someFeatureMock wasNot called // mock 객체가 사용되지 않음
}
}
}
}
})

 

테스트 결과

댓글