Test 용어 살펴보기

박형석·2021년 12월 14일
2

Unit Test

목록 보기
1/3
post-thumbnail

Test Suite?

테스트 묶음(test suite)은 여러 테스트 케이스, 테스트 묶음, 또는 둘 다의 모임이다. 이것은 서로 같이 실행되어야 할 테스트들을 종합하는 데 사용된다.

SUT와 DOC?

Unit Test에서 각각의 Test Suite은 무엇을 테스트할 것인지 그 대상을 명확히 해야 한다. 이 때 하나의 테스트에서 테스트하고자 하는 주요 대상이 되는 Unit을 SUT(System Under Test)라고 부른다. 또한, SUT는 용어 그대로 시스템의 일부이기 때문에 다른 Unit과 상호 작용을 한다. 그 중 SUT는 자신이 의존하고 있는 객체가 있을 수 있는데, 이를 DOC(Depended On Component)라고 부른다.

Test Double?

주연 배우가 위험한 촬영을 할 때 '스턴트맨(스턴트 더블)'을 고용한다. 이 스턴트맨은 특정 장면을 충족하는 고도의 훈련을 받고, 특정 행동을 수행하는 방법을 알고 있다. 이 스턴트맨이 주연 배우를 얼마나 닮게 하는가는 장면의 특성마다, 상황마다 다르다.

이처럼 SUT를 테스트할 때, DOC가 문제가 되는 경우가 종종 있다. 특히 DOC가 외부 리소스에 의존적인 경우, SUT 테스트는 더 어려워진다. 이 경우 테스트를 위해 실제 (SUT가 아니라) DOC를 스턴트맨, Test Double로 대체할 수 있다. 스턴트맨이 주연 배우가 될 필요는 없는 것처럼 Test Double도 정확하게 진짜처럼 행동할 필요가 없다. SUT가 실제 API라고 생각할 정도로 비슷한 API, 필요한 API만 구현하면 된다. 이렇게 Test Double은 테스트 목적으로 만드는 a production object을 지칭한다. Mock과 유사한 의미를 가지며 Test Double이 좀 더 상위 의미로 사용된다.

Test Double의 종류와 개념, 어떻게 구현할 수 있는지는 다음 글에서 다뤄보려고 한다.

Test Isolation?

위처럼 SUT를 테스트할 때, DOC 때문에 테스트가 어려운 경우 이 DOC를 Test Double로 교체하여 SUT가 외부 환경 변화에 영향을 받지 않도록 만드는 과정을 Test Isolation이라고 부른다. 그리고 이런 환경에서 테스트하는 것을 Solitary Test라고 한다. 반면 외부 리소스를 사용하더라도 무방할 때는 외부 리소스를 제한할 필요가 없다. 이 경우는 의존성을 제거하지 않고 테스트를 수행하게 되는데 이를 Sociable Test라고 한다.

UseCase?

요구사항 달성을 위해서 소프트웨어 내에서 일어나는 여러가지 시나리오를 의미한다. 3가지 구성요소가 있다.

  1. 사용자가 제공해야 하는 입력
  2. 사용자에게 보여줄 출력
  3. 해당 출력을 생성하기 위한 처리 단계 기술

모든 UnitTest는 적어도 하나의 UseCase를 달성하기 위해 사용된다. UseCase 충족을 위해 적절히 동작하는지 테스트하는 것이 관건이다!

Unit Test 과정

setup, exercise, verify, teardown 4단계로 진행

  1. Setup Phase

    • SUT를 테스트하기 위한 환경 구성
    • 적절한 인스턴스 생성, 테스트를 위한 Input Data를 구성
  2. Exercise Phase

    • 테스트하고자 하는 동작을 수행.
    • SUT의 상태를 변경하고 이를 명시적으로 확인할 수 있어야 함
  3. Verify Phase

    • 수행한 테스트가 예상한 결과를 도출하였는지를 체크
  4. 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

profile
IOS Developer

0개의 댓글