Mock 객체란? 안드로이드 테스트에서의 필요성과 활용법

SOCICAL·2024년 12월 24일

android

목록 보기
2/20
post-thumbnail

클린 아키텍처를 공부하면서 자연스럽게 테스트 코드 작성법에 대해 알게 되었는데, Mock 라는 객체를 사용하여 알게 된 내용을 정리하려고 한다.

Mock는 왜 필요할까?

  • 진짜 객체를 테스트 환경에서 사용하기 어려운 경우가 많다.
    • 예를 들어, 네트워크 요청이나 DB 접근 또는 파일 시스템 작업처럼 실행에 있어 시간이 오래 걸리거나 외부 의존성이 있는 코드를 테스트 를 테스트 할 때 가짜 객체를 만들어 테스트를 편하게 할 수 있도록 해준다.

상황으로 Mock의 역할을 쉽게 이해하기

  • 실제 공연에서 진짜 소품(예: 유리잔)을 사용하는 대신, 리허설에서는 깨지지 않는 플라스틱 잔ㅇ르 사용한다고 가정해보자.
    • 이유: 진짜 유리잔은 매번 사용하게 되면 깨질 위험도 있고, 리허설 시간이 길어질 수 있기 때문이다.
      • 여기서 플라스틱 잔은 Mock이며, 유리잔은 실제 객체라고 생각하면 된다. 즉, 테스트 환경에 맞게 안정하고 효율적이게 해준다고 보면 된다.

예제 코드

// UserRepository 인터페이스
interface UserRepository {
    fun getUserById(userId: String): User
}

// 테스트 코드
class UserServiceTest {
    @Test
    fun `getUserById should return user`() {
        // 1. Mock 객체 생성
        val userRepository = mock<UserRepository>()
        val mockUser = User("123", "Alice")

        // 2. Mock 동작 설정 (id가 "123"일 때 항상 mockUser 반환)
        whenever(userRepository.getUserById("123")).thenReturn(mockUser)

        // 3. 테스트 수행
        val result = userRepository.getUserById("123")

        // 4. 결과 검증
        assertEquals("Alice", result.name)
    }
}

Mock 장점

  • 테스트 속도 향상: 네트워크나 DB 호출 없이 빠르게 테스트가 가능하다.
  • 독립성 보장: 테스트 코드가 외부 시스템에 의존하지 않는다.
  • 다양한 시나리오 검즘: Mock로 에러 상황이나 특정 조건을 쉽게 재현이 가능하다.

요약하면,,

  • Mock를 진짜 객체 대신 테스트를 도와주는 대역 배우라고 생각하면 된다. 진짜 객체처럼 동작하지만, 가짜라서 더 빠르고 안전하게 원하는 상황을 재현할 수 있다.

0개의 댓글