본문 바로가기

mockk3

[MockK] mock 객체가 호출되지 않았음을 검증하기 기능 개발을 하다보면 상태 값에 따라 특정 기능을 실행할지 말지 분기를 탈 필요가 있다. 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: Call.. 2022. 10. 21.
[MockK] 메서드 호출 순서 검증하기 객체의 메서드를 여러 번 호출하는 로직이 있을 때, 사용되는 메서드를 순서대로 확인하고 싶을 때가 있을 수 있다. (하지만 구현 사항을 너무 깊게 확인하는 것일 수 있으니 정말 필요한 검증인지 충분히 고민해봐야한다) MockK를 사용할 때는 verifySequence를 사용하면 mock object의 호출 순서를 확인할 수 있다. import io.kotest.core.spec.style.DescribeSpec import io.mockk.mockk import io.mockk.verifySequence class MyObject { fun fun1(value: Any) { println(value) } fun fun2(value: Any) { println(value) } fun fun3(value: .. 2022. 4. 15.
[MockK] 인자 값 그대로 리턴하기 Mock 객체를 사용하다보면 JpaRepository.saveAll과 같이 입력값을 그대로 리턴해주고 싶은 경우가 생길 수 있다. 이 경우 returnsArgument를 사용하면 된다. interface TestTarget { fun function(arg1: Any, arg2: Any): Any } internal class MyRepositoryMockTest : DescribeSpec({ it(" returnsArgument 0은 첫번째 인자를 리턴한다") { // given val testTargetMock= mockk() // when every { testTargetMock.function(any(), any()) } returnsArgument 0 // then testTargetMock.f.. 2022. 4. 14.