단위 테스트를 할 때 운영 코드를 대신하는 코드 대역을 사용하기도 한다. 이런 대역 코드를 테스트 대역이라고 부른다. 오늘은 테스트 대역이 사용되는 이유와 목적에 따른 테스트 대역 종류에 대해 강의를 통해 알아보자.
대역과 가정
- DOC(depended-on component, 의존 구성 요소) 준비 비용이 큰 경우
- 구동에 많은 자원이 필요하다.
- 환경 제어가 어렵다.
- DOC가 SUT(System under Test)에 제공하는 계약(인터페이스)을 준수하는 대역 코드를 사용한다.
- 대역 코드가 계약을 DOC와 동일하게 준수할 것이라고 가정(assume)한다.
-> 운영 코드 대신 사용되는 대역이 운영 코드와 같은 인터페이스를 제공한다고 생각해야 한다. 운영서버, 운영DB가 아닌 대역이라도 최대한 운영 환경과 동일해야 한다.
Dummy
- 테스트 대역 중에서 가장 단순한 형태이다.
- SUT 준비를 위해 해결이 되어야 하는 의존성인데, 어떤 특정 테스트 시나리오에서는 실제로 사용되지 않는 경우에 만들어지는 대역이다.
- SUT가 의존하고 있는 Dependency 추상화를 구현하되 실제론 쓰이진 않기 때문에 아무 동작을 하지 않아도 상관없다.
Stub
- 간접 입력을 제공해주는 의존성의 대역이다.
- 미리 준비된 답을 출력한다.
즉 미리 정해둔 값을 이용해서 의존의 일부분을 작동하는 것처럼 꾸민다는 말이다.
Spy
- 간접 출력을 제공해주는 의존성의 대역이다.
- SUT의 간접 출력을 기록한다.
Mock
- SUT 내부의 행위(상호작용) 검증한다.
- 강의에서는 Test Double과 동일한 의미로 Mock을 사용하기도 한다.
Fake
- 의존성 계약을 준수하는 가변운 구현체이다.
- DOC보다 적은 부작용을 가지고 있다.
- 인메모리 데이터베이스 등이 있다.
회고
단위 테스트가 어려울 때, 테스트 대역은 굉장히 좋은 도구인 것 같이 느껴졌다. 하지만 테스트 대역도 적절히 사용해야지만 이득을 얻을 수 있으니 주의를 해야겠다.