분류 전체보기
코드 작성 시 정적 변수와 정적 메서드 사용을 지양해야 하는 이유 알아보기
Static Variable과 Static Method 정적인 변수와 메서드는 한 번 선언 해놓으면 이곳 저곳에서 모두 사용할 수 있기 때문에 매우 편리하게 사용될 수 있다. 하지만, 시스템적으로 보았을 때 정적인 변수와 메서드는 최대한 지양하는 것이 좋다. 정적인 변수와 메서드를 참조 하는 클래스가 늘어난다는 것은 정적 변수와 메서드에 의존성이 생긴다는 것을 뜻한다. 이는 프로그램이 작을 때는 문제가 없지만 프로그램이 커지면 커질 수록 큰 문제로 번진다. 특히 정적 변수는 해당 변수가 여러 클래스에서 공유되게 될 경우 해당 클래스들이 서로가 서로에게 의존성이 생기는 것을 의미한다. 정적 메서드의 경우 정적 변수를 참조하지 않으면 그나마 낫지만, 정적 변수를 참조하지 않더라도 테스트 시에 문제가 생길 가..
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을 사용하..