MockitoJUnitRunner 사용해 Mockito 코드 깔끔하게 만들기 : @Mock

2022. 12. 23. 22:15·Unit Testing
반응형

이전 테스트

이전 시간에 다음과 같은 테스트를 작성했다. setUp에서 Mockito.mock 메서드를 사용해 loginRepository를 Mock 객체로 초기화 시켰는데, 여기서는 LoginUseCase에 대한 의존성이 하나만 있어서 한 줄로 Mocking이 끝났다.

class LoginUseCaseTest {
    private lateinit var loginUseCase: LoginUseCase
    private lateinit var loginRepository: LoginRepository

    @Before
    fun setUp() {
        loginRepository = Mockito.mock(LoginRepository::class.java)
        loginUseCase = LoginUseCase(loginRepository)
    }

    @Test
    fun testLoginSuccessStub() {
        val repositorySuccessResult = LoginRepositoryResult.Success("test_token")
        Mockito.`when`(loginRepository.login(userName = "test", password = "test"))
            .thenReturn(repositorySuccessResult)

        val result = loginUseCase.logIn(userName = "test", password = "test")
        assertEquals(LoginUseCaseResult.Success("test_token"), result)
    }
}

 

하지만 만약 10개 이상의 Mock객체가 있다면 어떻게 해야 할까? setUp메서드가 매우 복잡해질 것이다. 이를 해결하기 위한 방법이 있다.

 

바로 Annotation 기반으로 테스트를 작성할 수 있도록 도와주는 MockitoJUnitRunner 를 사용하는 것이다.

 

MockitoJUnitRunner 사용해 코드 깔끔하게 만들기

MockitoJUnitRunner를 사용하기 위해서는 클래스 위에 다음과 같이 선언하면 된다.

@RunWith(MockitoJUnitRunner::class)
class LoginUseCaseTest {

 

그러면 이제 loginRepository에 @Mock을 붙이면 @Before에 Mockito.mock을 수행하는 것과 같은 효과를 만든다.

@Mock
private lateinit var loginRepository: LoginRepository

 

따라서 전체 코드는 다음과 같이 바뀐다. setUp에서 Mockito.mock 메서드가 사라진 것을 확인할 수 있다.

@RunWith(MockitoJUnitRunner::class)
class LoginUseCaseTest {
    private lateinit var loginUseCase: LoginUseCase

    @Mock
    private lateinit var loginRepository: LoginRepository

    @Before
    fun setUp() {
        loginUseCase = LoginUseCase(loginRepository)
    }

    @Test
    fun testLoginSuccessStub() {
        val repositorySuccessResult = LoginRepositoryResult.Success("test_token")
        Mockito.`when`(loginRepository.login(userName = "test", password = "test"))
            .thenReturn(repositorySuccessResult)

        val result = loginUseCase.logIn(userName = "test", password = "test")
        Assert.assertEquals(LoginUseCaseResult.Success("test_token"), result)
    }
}

 

개인적인 의견

개인적으로 Annotation을 사용하는 것은 코드를 읽는 사람에게 요구하는 지식을 증가시키기 때문에 좋아하지 않는다. 하지만, Mockito 정도의 프레임웍이면 Kotlin, Java 기반 프로젝트에서 테스트를 작성할 때 많이 사용되기 때문에 이정도 Annotation은 가독성을 떨어트리지 않아 괜찮다고 생각한다. 너무 Annotation을 남발하는 것만 주의하도록 하자.

반응형

'Unit Testing' 카테고리의 다른 글

[Unit Testing] Android Context 객체를 사용하는 클래스 테스트하기  (0) 2022.12.25
코드 작성 시 정적 변수와 정적 메서드 사용을 지양해야 하는 이유 알아보기  (0) 2022.12.24
Kotlin에서 Mockito ArgumentCaptor 사용시 java.lang.NullPointerException: argumentCaptor.capture() must not be null 나오는 현상 해결 방법  (0) 2022.12.22
[Mockito] ArgumentCaptor 사용해 객체의 interaction 기록하기  (0) 2022.12.21
[Mockito] when 사용법 한 번에 정리하기 : thenReturn, thenAnswer, doThrow  (0) 2022.12.20


'Unit Testing' 카테고리의 다른 글
  • [Unit Testing] Android Context 객체를 사용하는 클래스 테스트하기
  • 코드 작성 시 정적 변수와 정적 메서드 사용을 지양해야 하는 이유 알아보기
  • Kotlin에서 Mockito ArgumentCaptor 사용시 java.lang.NullPointerException: argumentCaptor.capture() must not be null 나오는 현상 해결 방법
  • [Mockito] ArgumentCaptor 사용해 객체의 interaction 기록하기
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    Docker
    Coroutines Context
    Machine Learning
    Coroutines Channel
    pytorch
    Kotlin
    junit
    unit testing
    Coroutines Flow
    mockito
    코루틴 Flow
    코루틴
    Coroutines
    numpy
    코루틴 채널
    도커
    coroutine
    컨테이너
    unit test
    TensorFlow
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
MockitoJUnitRunner 사용해 Mockito 코드 깔끔하게 만들기 : @Mock
상단으로

티스토리툴바