본문 바로가기

Android/TDD(Test Driven Development, 테스트 주도 개발)

Mockito 프레임워크 - TDD(테스트 주도 개발)

반응형

2021.12.14 - [Android/TDD(Test Driven Development, 테스트 주도 개발)] - Test Double

 

Test Double

2021.12.10 - [Android+Kotlin+Figma] - Unit Test - TDD(Test Driven Development, 테스트 주도 개발) Unit Test - TDD(Test Driven Development, 테스트 주도 개발) 사담 안드로이드 개발의 기초적인 부분을 훑..

roomedia.tistory.com

Mockito

이전 포스팅까지 우리는 Test Double 클래스를 직접 작성하였습니다. Mockito 프레임워크는 이러한 클래스 작성에 필요한 노력을 줄여주는 프레임워크입니다. 이번 포스팅에서는 두 가지 방식으로 작성한 테스트를 비교해보며 Mockito 프레임워크의 기본 개념을 알아봅시다. 테스트 대상으로는 userId를 Endpoint에 전달하여 캐시하는, 이전과 비슷한 로직의 FetchUserProfileUseCaseSync 유닛을 사용하겠습니다.

Handmade Test Double

이외에도 각기 다른 Error에 대한 테스트 케이스가 추가되어야 합니다. Test Double 클래스는 다음과 같습니다.

Use Mockito

Mockito 프레임워크를 사용한 setUp입니다. 별도의 Test Double 클래스를 생성할 필요없이, Mockito.mock() 함수를 사용하여 인터페이스의 구현체를 생성할 수 있습니다. 함수 successuserProfileHttpEndpointSyncMock.getUserProfile()의 반환 값을 지정하는 Stub 코드인데요. 자세한 내용은 다음과 같습니다. Mockito.when() 함수를 이용하여 함수가 호출되는 시점을 획득할 수 있고, .thenReturn()으로 반환값을 지정하는 것입니다.

setUp에서는 success 상황을 가정하고, 다른 상황이 필요할 때마다 .thenReturn()으로 덮어씁니다.

에러를 발생시켜야 하는 상황에서는 위와 같이 .thenThrow() 함수를 사용합니다.

객체에서 특정 메소드가 호출되었는지 확인하는 방안은 Mockito.verify()를 활용하는 것입니다. verify() 이후에는 파라미터로 전달한 객체의 메소드를 그대로 활용할 수 있습니다. 전달되는 파라미터는 ArgumentCaptor를 사용하여 확인할 수 있으며, ArgumentCaptor.forClass(String::class.java)와 같이 사용하면 .capture() 메소드를 사용하여 String 파라미터를 수집하고, 이를 확인할 수 있습니다.

verifyNoMoreInteractions은 파라미터로 전달된 객체가 어떠한 메소드도 호출되지 않음을 검증합니다.

반응형