소개


<aside> 💡 Mock: 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체

</aside>

<aside> 💡 Mockito: Mock객체를 쉽게 만들고 관리하고검증할 수 있는 방법을 제공해주는 프레임워크

</aside>

협업 혹은 외부 API를 사용해서 개발을 해야하는 경우가 많다.

그런데 협업하는 다른 개발자가 해당 API를 아직 구현하지 않았거나 외부 API가 현재 제공되지 않는다면, 그래서 내가 필요한 데이터를 받지 못한다면 어떻게 해야할까? 마감 일정은 정해져있기에 마냥 기다릴 수는 없기에 우리는 API를 사용하여 적절한 값을 반환하는 인터페이스를 만든 뒤 프록시를 이용해서 이를 해결할 수 있다.

그럼, 테스트 케이스를 작성할때는 어떻게 해야할까? 이 경우 Mock프레임워크를 이용해 요청을 Mocking해서 실제 응답결과와 비슷한 결과를 미리 개발자가 작성해서 응답하도록 할 수 있다.

그리고, 내가 테스트를 해야하는 내용이 DB의 내용을 조회하고 변경하고 삭제를 해야한다면 어떨까?

실제 DB를 건드리기는 위험하고, 개발중에는 해당 DB가 아직 구축되어있지 않을수도 있다.

이럴경우 Mockito와 같은 Mock프레임워크를 이용하면 안전하고 독립적인 테스트가 가능해진다.

🚀참고: 단위테스트의 고찰

개발자마자 테스트의 고립성의 수준을 어느정도로 유지해야 단위테스트인가에 대해서 생각이 다르다. 어떠한 엄격한 개발자들은 모든 의존성을 끊어야 하기 때문에 모든 의존성에 대해서 mocking을 해야한다는 개발자들이 있다. 한편, 어떠한 개발자는 단위를 생각할 때 단위를 어떠한 행동의 단위로 생각할수도 있다고 한다. 행위를 단위로 보기때문에 행위에 연관된 모든 객체들은 같이 테스트가 진행되도 괜찮다고 생각한다.

여기에 정답은 없기에 개발을 시작 할 때 단위테스트에서 단위의 범위와 Mock을 어디까지 해야할 지에 대해서는 팀 별로 논의를 하는것이 좋다.

시작하기