테스트 대역이란?
모든 유형의 테스트를 위한 가짜 의존성을 의미하고, 테스트가 실행될 때 다른 객체를 대신한다.
Gerard Meszaros의 xUnit Test Patterns라는 책에서는 테스트 대역을 다섯 가지(더미, 스텁, 스파이, 목, 페이크)로 구분한다.
테스트 대역의 기본 메커니즘은 다형성을 이용하는 방법이다.
외부 서비스를 사용하는 코드를 테스트 하는 경우, 인터페이스를 정의하고 외부 서비스 대신 테스트 용도의 구현체를 생성하는 것이다.
테스트 대역의 타입 계층 구조
더미(Dummy)
가장 단순하고, 원시적인 유형의 테스트 대역이다.
기본적으로 아무 일도 하지 않는 구현체로 인스턴스화가 필요한 경우 사용한다.
만약 메서드가 무언가 반환을 해야하는 경우 0, null과 같은 값을 반환한다.
스텁(Stub)
시나리오마다 다른 값(미리 준비 된 결과)을 반환한다.
이를 통해 특정 조건에서 메서드가 예상한대로 동작하는지 확인할 수 있다.
스파이(Spy)
스텁과 유사하지만 호출 여부를 기록하거나 호출할 때 전달한 인자값을 기록할 수 있다.
예) 메일 전송 기능을 가진 객체를 테스트 대역으로 구현했을 때 메일 전송 횟수를 기록한다.
목, 모의 객체(Mock)
목은 더미, 스텁, 스파이를 포함한다.
호출 시 사전에 정의된 결과를 반환하고, 예상치 못한 호출이 있을 경우 예외를 던질 수 있다.
또한 호출에 대한 검증을 할 수 있다.