Testing Codes

    [MockK] relaxed 사용해 복잡한 객체에 대한 Dummy 출력 설정하기

    Dummy란 무엇인가? Test Doubles에서 Dummy란 어떤 함수를 호출하든 응답값으로 빈 값을 주는 객체를 뜻한다. 이러한 Dummy는 반환값이 필요없는 객체의 반환값을 설정하기 위해 사용한다. 하지만, 순수한 의미의 Dummy는 응답값이 설정되는 순간부터는 Stub이 되기 때문에 사용처가 한정된다. 테스트를 위한 환경 설정 이 글에서는 ManyGetRepository를 주입 받는 ManyGetUseCase를 테스트 한다. class ManyGetUseCase( private val manyGetRepository: ManyGetRepository ) { fun callGet(int: Int): Int = when (int) { 0 -> manyGetRepository.getA() 1 -> ma..

    [MockK] verify 사용해 목 객체의 상호 작용 테스트하기

    테스트에서 사용할 객체 테스트에서 사용할 객체는 다음과 같다. 이 객체들에 대해서는 이전 글에서 이미 설명했고 복잡하지 않은 객체이므로, 추가로 설명하지 않는다. class UserProfileFetcher( private val userRepository: UserRepository, ) { fun getUserProfileById(id: String): UserProfile { return UserProfile( id = id, name = userRepository.getNameByUserId(id) ) } } interface UserRepository { fun saveUserName(id: String, userName: String) fun getNameByUserId(id: String):..

    [MockK] every를 match와 같이 사용해 입력값을 범위로 지정하기

    입력값을 특정 값으로 지정하는 것의 한계 입력값을 다음과 같이 지정하게 되면, getNameByUserId에 0xffffffff이 입력되었을 때만 "TestUser"이 반환된다. every { userRepository.getNameByUserId("0xffffffff") } returns "TestUser" 그렇다면 만약 유효한 아이디 일 경우에 "TestUser"을 반환하고, 유효하지 않은 아이디일 경우에는 예외를 반환하는 목 객체는 어떻게 만들 수 있을까? 만약 유효한 아이디가 8자리의 16진수값이라면, 이에 대한 모든 값에 대해 every를 작성하게 되면 수십억줄의 코드를 작성해야 할 수 있다. 이런 경우 만약 입력 값을 특정 범위로 지정할 수 있다면 매우 도움이 될 것이다. 이를 위해 MockK..

    [MockK] every 사용해 목 객체 입력에 대한 응답값 설정하기

    이전 글 요약 이전 글에서는 mockk 함수를 사용해 Mock 객체를 만드는 방법에 대해 알아보았고, val userRepository : UserRepository = mockk() val contactRepository : ContactRepository = mockk() val userProfileFetcher = UserProfileFetcher( userRepository = userRepository, contactRepository = contactRepository ) every를 사용해 목 객체의 함수가 호출될 때 반환 값을 반환하는 방법에 대해 알아보았다. every { contactRepository.getPhoneNumberByUserId(any()) }.returns("010-xx..

    [MockK] MockK 란 무엇인가? Gradle 사용해 MockK 개발 환경 설정하고 테스트 만들어보기

    MockK란 무엇인가? MockK는 코틀린에서 테스트 시 목(Mock) 객체를 생성하는 것을 돕는 라이브러리이다. 기존에 목 객체를 만들기 위해서는 인터페이스를 목 클래스로 직접 구현을 해야 했는데, MockK를 사용하면 간단하게 목 객체를 생성할 수 있다. Gradle에 MockK 의존성 추가하기 Gradle에 MockK에 대한 의존성은 다음과 같이 추가해주면 된다. dependencies { ... // MockK 라이브러리 testImplementation("io.mockk:mockk:1.13.8") } MockK의 사용 MockK를 사용하는 것은 매우 간단하다. 예를 들어 다음과 같은 UserProfileFetcher이 있다고 해보자. class UserProfileFetcher( private ..