SUT
- ”System under test”
- “whatever thing we are testing”
- Unit Tests를 다룰 때에는
SUT
는 테스트 하고자 하는 class, object, methods 이다. (a.k.a. CUT, OUT, MUT)
- Customer Tests를 다룰 때에는 SUT는 아마 전체 application 혹은 major한 subsystem이다.(a.k.a AUT)
Test Double
- xUnit Test Patterns의 저자인 제라드 메스자로스가 만든 용어로, 스턴트 더블에서 아이디어를 얻어서 만든 용어입니다. 테스트 더블은 의존 구성요소를 사용할 수 없을 때 테스트 대상 코드와 상호작용 하는 객체입니다.
SUT
이 의존하는 component를 “test-specific equivalent”로 대체하자!
- real
depended-on component (DOC)
를 활용하지 못하거나 활용하지 않기로 결정한 경우 그것을 TEST Double로 대체할 수 있다.
- Test Double은 real
DOC
처럼 동작할 필요가 없으며 단순히 같은 API를 제공하여 SUT이 real 처럼 활용할 수 있도록 하면 된다.
Test Double을 활용하는 경우
- SUT이 활용하는 DOC를 활용할 수 없어서 테스트를 verify 할 수 없는 경우 (
output
을 담아줘야함)
- SUT이 활용하는 DOC를 활용할 수 없어서 SUT에 control point가 필요한 경우 (
input
을 제공해줘야함)
- 느린 테스트를 빠르게 만들고 싶은 경우
Test Double의 종류

Variation :
Stubs
- SUT에게 indirect inputs를 위한 control point를 제공
Variation:
Spies
Test Stub
처럼 SUT에게 Indirect inputs를 제공함
- 추가로 SUT의 indirect outputs를 captures 하여 추가적인 검증을 진행할 수 있음
Variation:
Mocks
- 특정 호출에대에 기대하는 값을 pre-programming함
- 상황에따라 예외의 호출을 기대할 수 도 있음
- Mocks use behavior verification
Variation:
Fake
- 실제 동작하지만 shortcut 처럼 동작함
- e.g.) InMemoryTestDatabase
Variation :
Dummy
- 그냥 파라미터를 채우기 위해 사용됨
- 꺼내어 사용되는 일은 없음
...