기능 개발을 하다보면 상태 값에 따라 특정 기능을 실행할지 말지 분기를 탈 필요가 있다.
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 객체가 사용되지 않음
}
}
}
}
})
'Java & Kotlin > Kotlin' 카테고리의 다른 글
reified를 통해 generic type 정보 가져오기 (0) | 2023.01.16 |
---|---|
JPA entity의 VO로 Kotlin value class 사용하기 (3) | 2022.06.01 |
[MockK] 메서드 호출 순서 검증하기 (0) | 2022.04.15 |
[MockK] 인자 값 그대로 리턴하기 (0) | 2022.04.14 |
observable, vetoable를 통한 프로퍼티 변경 감지 (0) | 2021.11.06 |
댓글