2021.12.14 - [Android/TDD(Test Driven Development, 테스트 주도 개발)] - Test Double
Mockito
이전 포스팅까지 우리는 Test Double
클래스를 직접 작성하였습니다. Mockito
프레임워크는 이러한 클래스 작성에 필요한 노력을 줄여주는 프레임워크입니다. 이번 포스팅에서는 두 가지 방식으로 작성한 테스트를 비교해보며 Mockito
프레임워크의 기본 개념을 알아봅시다. 테스트 대상으로는 userId
를 Endpoint에 전달하여 캐시하는, 이전과 비슷한 로직의 FetchUserProfileUseCaseSync
유닛을 사용하겠습니다.
Handmade Test Double
이외에도 각기 다른 Error에 대한 테스트 케이스가 추가되어야 합니다. Test Double 클래스는 다음과 같습니다.
Use Mockito
Mockito
프레임워크를 사용한 setUp
입니다. 별도의 Test Double
클래스를 생성할 필요없이, Mockito.mock()
함수를 사용하여 인터페이스의 구현체를 생성할 수 있습니다. 함수 success
는 userProfileHttpEndpointSyncMock.getUserProfile()
의 반환 값을 지정하는 Stub
코드인데요. 자세한 내용은 다음과 같습니다. Mockito.when()
함수를 이용하여 함수가 호출되는 시점을 획득할 수 있고, .thenReturn()
으로 반환값을 지정하는 것입니다.
setUp
에서는 success
상황을 가정하고, 다른 상황이 필요할 때마다 .thenReturn()
으로 덮어씁니다.
에러를 발생시켜야 하는 상황에서는 위와 같이 .thenThrow()
함수를 사용합니다.
객체에서 특정 메소드가 호출되었는지 확인하는 방안은 Mockito.verify()
를 활용하는 것입니다. verify()
이후에는 파라미터로 전달한 객체의 메소드를 그대로 활용할 수 있습니다. 전달되는 파라미터는 ArgumentCaptor
를 사용하여 확인할 수 있으며, ArgumentCaptor.forClass(String::class.java)
와 같이 사용하면 .capture()
메소드를 사용하여 String
파라미터를 수집하고, 이를 확인할 수 있습니다.
verifyNoMoreInteractions
은 파라미터로 전달된 객체가 어떠한 메소드도 호출되지 않음을 검증합니다.
'Android > TDD(Test Driven Development, 테스트 주도 개발)' 카테고리의 다른 글
Turbine 없이 kotest에서 StateFlow, SharedFlow 테스트 하기, Unit Test (1) | 2022.04.12 |
---|---|
로버트 C. 마틴 TDD 3원칙 - TDD(Test Driven Development) (0) | 2021.12.17 |
Unit Test(유닛 테스트) 팁 5가지 - TDD(테스트 주도 개발) (0) | 2021.12.16 |
Test Double(테스트 더블) - TDD(테스트 주도 개발) (0) | 2021.12.14 |
Unit Test(유닛 테스트) - TDD(테스트 주도 개발) (0) | 2021.12.10 |