Unit Testing
MockitoJUnitRunner 사용해 Mockito 코드 깔끔하게 만들기 : @Mock
이전 테스트 이전 시간에 다음과 같은 테스트를 작성했다. 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(loginRepo..
Kotlin에서 Mockito ArgumentCaptor 사용시 java.lang.NullPointerException: argumentCaptor.capture() must not be null 나오는 현상 해결 방법
문제 상황 Kotlin에서 Mockito ArgumentCaptor을 사용하기 위해서 Java에서 쓰던 방법과 같은 방법을 사용하면 문제가 생긴다. @Test fun testLoginSuccessMockArgumentCaptor() { val repositorySuccessResult = LoginRepositoryResult.Success("test_token") Mockito.`when`(loginRepository.login(userName = "test", password = "test")) .thenReturn(repositorySuccessResult) val result = loginUseCase.logIn(userName = "test", password = "test") val argum..
[Mockito] ArgumentCaptor 사용해 객체의 interaction 기록하기
ArgumentCaptor 란? ArgumentCaptor란 interaction을 기록하는 Mock 타입의 Test Double을 만드는 객체이다. 즉, ArgumentCaptor은 객체의 interaction을 기록한다. ArgumentCaptor 사용하기 위한 환경 설정 ArgumentCaptor을 사용하기 위해서 앞선 글 https://simcode.tistory.com/12 의 환경을 가져와서 LoginUseCase, LoginUseCaseResult, LoginRepository, LoginRepositoryResult를 사용한다. 환경 설정 부분을 읽도록 하자. ArgumentCaptor 사용한 테스트 만들기 LoginUseCase의 logIn메서드에서 userName과 password변형이..
[Mockito] when 사용법 한 번에 정리하기 : thenReturn, thenAnswer, doThrow
Mockito에서 when은 어떤 역할을 하는가? Mockito의 when은 Test Double 중 Stub를 만들 수 있는 강력한 무기이다. when을 통해 Mock 객체의 메서드를 호출 했을 때 특정한 응답을 주도록 만들 수 있다. * Stub : Mock 객체에 특정한 입력 시 특정한 출력을 주도록 만드는 것 when 을 사용하기 위한 환경 설정 https://simcode.tistory.com/12 의 LoginRepository, LoginRepositoryResult, LoginUseCase, LoginUseCaseResult 를 모두 가져온다. when 사용하기 메서드를 실행하면 특정한 응답을 할 수도 있고, 응답이 매번 바뀔 수도 있고, 애러가 발생할 수도 있다. 따라서 when을 사용하..
[Unit Testing] Mockito 사용해 Test Double 만들기
이번 시간에는 Mockito를 사용해 Test Double을 만드는 방법을 살펴볼 것이다. Mockito를 사용하기 위한 환경 설정부터 시작하자. 환경설정 이전 글까지는 junit:junit:4.13.2 만으로 테스트가 가능했지만, 이번 글에서는 Mockito를 사용하므로 하나의 Dependency를 추가해야 한다. 바로 'org.mockito:mockito-inline:3.3.3' 이다. Kotlin을 사용한다면 mockito-inline을 추가해 주는 것이 좋다. dependencies { ... testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito.kotlin:mockito-kotlin:4.1.0' } 추가했으면 Load G..