테스트 묶음(test suite)은 여러 테스트 케이스, 테스트 묶음, 또는 둘 다의 모임이다. 이것은 서로 같이 실행되어야 할 테스트들을 종합하는 데 사용된다.
Unit Test에서 각각의 Test Suite
은 무엇을 테스트할 것인지 그 대상을 명확히 해야 한다. 이 때 하나의 테스트에서 테스트하고자 하는 주요 대상이 되는 Unit을 SUT(System Under Test)
라고 부른다. 또한, SUT는 용어 그대로 시스템의 일부이기 때문에 다른 Unit과 상호 작용을 한다. 그 중 SUT는 자신이 의존하고 있는 객체가 있을 수 있는데, 이를 DOC(Depended On Component)
라고 부른다.
주연 배우가 위험한 촬영을 할 때 '스턴트맨(스턴트 더블)'을 고용한다. 이 스턴트맨은 특정 장면을 충족하는 고도의 훈련을 받고, 특정 행동을 수행하는 방법을 알고 있다. 이 스턴트맨이 주연 배우를 얼마나 닮게 하는가는 장면의 특성마다, 상황마다 다르다.
이처럼 SUT를 테스트할 때, DOC가 문제가 되는 경우가 종종 있다. 특히 DOC
가 외부 리소스에 의존적인 경우, SUT
테스트는 더 어려워진다. 이 경우 테스트를 위해 실제 (SUT
가 아니라) DOC
를 스턴트맨, Test Double
로 대체할 수 있다. 스턴트맨이 주연 배우가 될 필요는 없는 것처럼 Test Double
도 정확하게 진짜처럼 행동할 필요가 없다. SUT
가 실제 API라고 생각할 정도로 비슷한 API, 필요한 API만 구현하면 된다. 이렇게 Test Double
은 테스트 목적으로 만드는 a production object을 지칭한다. Mock과 유사한 의미를 가지며 Test Double
이 좀 더 상위 의미로 사용된다.
Test Double
의 종류와 개념, 어떻게 구현할 수 있는지는 다음 글에서 다뤄보려고 한다.
위처럼 SUT를 테스트할 때, DOC 때문에 테스트가 어려운 경우 이 DOC를 Test Double로 교체하여 SUT가 외부 환경 변화에 영향을 받지 않도록 만드는 과정을 Test Isolation이라고 부른다. 그리고 이런 환경에서 테스트하는 것을 Solitary Test라고 한다. 반면 외부 리소스를 사용하더라도 무방할 때는 외부 리소스를 제한할 필요가 없다. 이 경우는 의존성을 제거하지 않고 테스트를 수행하게 되는데 이를 Sociable Test라고 한다.
요구사항 달성을 위해서 소프트웨어 내에서 일어나는 여러가지 시나리오를 의미한다. 3가지 구성요소가 있다.
모든 UnitTest는 적어도 하나의 UseCase를 달성하기 위해 사용된다. UseCase 충족을 위해 적절히 동작하는지 테스트하는 것이 관건이다!
setup, exercise, verify, teardown 4단계로 진행
Setup Phase
Exercise Phase
Verify Phase
Teardown Phase
참고라고 하지만... 거의 베낀 블로그들 (감사합니다!)
https://hcn1519.github.io/articles/2021-09/unittest
http://xunitpatterns.com/Test Double.html
https://codinghack.tistory.com/92
https://www.crocus.co.kr/1555