[Mockito] when 사용법 한 번에 정리하기 : thenReturn, thenAnswer, doThrow
·
Unit Testing
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 만들기
·
Unit Testing
이번 시간에는 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..
Test Double이란 무엇인가? Test Double의 종류, 사용법 알아보기
·
Unit Testing
Test Double이란 무엇인가? 다른 객체에 의존성이 있는 객체들은 테스트 하기 어렵다. 테스트 시 만약 의존성이 있는 객체의 진짜 인스턴스를 사용하면 이 의존성이 있는 객체에 테스트가 영향을 받게 된다. 이를 해결하기 위해 가짜 객체를 사용하는데 이를 Test Double이라 한다. Test Double의 종류 Test Double에는 Fake(가짜), Stub(스텁), Mock(목) 3가지 종류가 있다. Fake Fake는 테스트를 위한 가짜 구현을 하는 방식이다. 예를 들어 DB에 저장하는 코드를 가진 클래스가 있다고 하면 이를 메모리에 대신 저장하는 방식으로 가짜 구현을 한다. 즉, 프로덕션의 구현에 영향을 받지 않고 구현을 하는 것이다. 예를 들어 다음과 같이 데이터 레이어에서 Todo를 데..
Unit Testing에서 Test Double이 필요한 이유는 무엇일까?
·
Unit Testing
Test Double이란? class A에 대한 테스트를 하고 싶은데 class B가 다른 class B와 의존성이 있을 경우 어떻게 해야할까? 이 경우 간단하게 생각하면 class B를 인스턴스화 하면 된다고 생각할 수 있다. 하지만 이런 경우 class B를 실제로 인스턴스화 하면 class B로 인해 class A의 테스트에 문제가 생길 수 있다. 또한 class A의 테스트가 class B에 의존성을 갖는 것 또한 옳은 테스트 방향이 아니다. 또한 어떤 경우에는 classB를 인스턴스화 하는 것이 불가능할 수도 있다. 이런 문제들을 해결하기 위한 것이 바로 Test Double이다. Test Double은 class B를 임의의 객체로 대체해서 class B의 동작을 모방해서 class A에서 사..
Kotlin에서 사용할 수 있는 JUnit assert 종류 알아보기 : assertEquals, assertTrue, assertThrows, assertNotNull
·
Unit Testing
이 글을 쓰게 된 이유 Java의 JUnit을 기반으로 문서들을 보다보니, Java의 assert와 Kotlin의 assert가 다른 것들을 알게 되었다. 예를 들어 Java에서 asserThat을 사용해 동일성을 테스트 하려면 다음과 같이 작성해야 한다. assertThat("a", is("a")) 하지만 이를 Kotlin의 assert로 바꾸면 다음과 같이 된다. assertEquals("a","a") 이러한 차이가 여러개 있다 보니 Unit Testing을 알아보는데 방해가 되어서 이번 글에서 정리하고 넘어가고자 한다. Kotlin의 assert Kotlin에는 다양한 assert가 있다. 그 중 자주 사용되는 것은 assertEquals, assertNotEquals, Assert.assertTr..