HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
📝
테스트
/
📝
SUT, Test Double
📝

SUT, Test Double

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의 종류

 
notion image
 
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
  • 그냥 파라미터를 채우기 위해 사용됨
  • 꺼내어 사용되는 일은 없음
...