[Spring] 가짜 객체(Mock Object)
앞서 얘기한 의존성 주입 패턴을 적용시켜 테스트 코드를 작성하다 보면, 테스트 코드를 포함한 클래스에 다음과 같이 의존성 주입을 위한 필드 멤버가 여럿 필요하게 된다.
하지만 실제 테스트 코드에서 호출하는것은 RestaurantService 하나 뿐이고, 나머지 둘은 RestaurantService의 동작에 필요한 의존성 객체들이다. 테스트 하는 입장(사용자 입장)에서는 RestaurantService가 어떤 의존성을 필요로 하는지 알 필요가 없고, 이를 가짜 객체(Mock Object)를 사용하여 감출 수 있다.
Spring의 mokito framework를 사용하여 Mock Object를 선언하고 사용하는 방법은 다음과 같다.
테스트 메소드에서는 기존 테스트(mvc.perform 부분)를 만족시키기 위해 가짜 객체(restaurantService)를 사용하여 테스트를 만족시키는 return값을 설정한다. 가짜 객체에서는 실제 필요로하는 의존성 객체를 할당하지 않았으므로 그에 해당하는 의존성 주입을 하지 않아도 사용이 가능하다.
Mock Object의 의의
가짜 객체(Mock Object)를 사용하면 테스트 하고자 하는 부분과 그 테스트를 수행하기 위해 필요로 하는 부분(ex. 의존하는 객체들의 상태)을 분리하여 검증할 수 있다. 즉, 개발자가 테스트 외적인 부분을 통제 해 두고 테스트 하고자 하는 행위 자체에 집중할 수 있게 한다.