xUnit 테스트 패턴에서 진입점과 종료점 정의
제라드 메스자로스가 쓴 <xUnit 테스트 패턴>(에이콘출판사, 2010)8에서는 직접 입출력과 간접 입출력을 설명한다. 직접 입력은 필자가 이 책에서 진입점이라고 용어를 바꾸어 사용하고 있는데, 제라드 메스자로스는 이를 ‘정문으로 들어오는 것’으로 표현한다. 이는 우리가 무언가를 직접 호출하고 그 결과를 바로 확인할 수 있는 경우다. 그리고 간접 출력은 종료점으로 사용하는데, 앞서 예제에서 살펴본 상태 값 변화나 서드 파티 호출 같은 것이다. 종료점은 앞서 살펴보았듯이 내부 상태를 직접 들여다보지 않고도 외부에서 확인할 수 있는 결과를 의미한다.
직접 입출력이나 간접 입출력 같은 개념은 각각 이론적으로 발전해 왔지만, 결국 동일한 아이디어에서 출발했다고 볼 수 있다. 필자는 이를 한데 묶어 ‘작업 단위(unit of work)’라고 하는데, 이 용어는 이 책에서만 등장한다. 물론 필자에게는 단순히 용어를 대체한 것 이상을 의미하지만, 여러분은 일단 참고 정도로만 이해해도 충분할 듯하다. xUnit 테스트 패턴에 대한 더 많은 정보는 https://xunitpatterns.com에서 확인할 수 있다.
진입점과 종료점의 개념이 단위 테스트 정의에 어떤 영향을 미치는지 살펴보자. 단위 테스트는 작업 단위를 호출하고, 그 작업 단위의 최종 결과로서 하나의 특정 종료점을 테스트 검증 목표로 사용한다. 최종 결과가 테스트가 검증하고자 하는 바와 다르면 단위 테스트는 실패한다. 단위 테스트 범위는 진입점과 종료점 사이에 사용되는 함수와 모듈의 수에 따라 함수 하나에서 여러 모듈이나 구성 요소에 이를 수 있다.