테스트 용어 정리

SUT(System Under Test)

  • 테스트의 대상이 되는 시스템 혹은 객체

협력객체(collaborator)

  • 부차적 객체(secondary objects)

테스트 더블(Test Double)

  • 진짜 객체 대신 테스트 용도로 사용되는 모든 종류의 위장 객체

  • 종류

    • Dummy 객체: 전달되지만 실제로는 사용되지 않는다. 일반적으로 매개 변수 목록을 채우기 위해 사용된다.

    • Fake 객체: 프로덕션에는 적합하지 않은 방법으로 구현되어 있는 객체이다. 예를 들면 DB에 접근하는 대신 테스트 전용 인메모리 DB에 접근하는 방식에서 이를 사용한다.

    • Stub: 테스트 중에 호출되면 미리 준비된 결과를 제공한다. 보통은 테스트를 위해 프로그래밍한 내용이 아니면 응답하지 않는다.

    • Spy: 자신이 호출된 방법/과정 등의 정보를 기록하는 Stub이다. 이메일 서비스에서 몇 개의 이메일을 보냈는지 기록하는 형태가 Spy에 해당한다.

    • Mock: 호출했을 때 사전에 정의된 명세대로의 결과를 돌려주도록 미리 프로그램되어있다. 예상치 못한 상황에서 호출되면 예외를 발생시킬 수 있으며, 예상한 만큼 호출되었는지 확인한다.

상태 검증

  • 메서드가 수행된 후 SUT나 협력객체의 상태를 살펴봄으로써 올바르게 동작했는지 판단

  • 상태를 검증하기 위해 프로덕션에서는 필요없는 상태 노출 메서드(ex. getter)가 추가될 수 있다.

행위 검증

  • 해당 메서드가 호출되었는지 검증함으로써 올바르게 동작했는지 판단한다.

  • 구현에 의존적이기 때문에 프로덕션 코드가 수정될 때 테스트 코드가 변경될 확률이 높아진다.

  • 테스트 작성이 상태 검증보다 쉽기 때문에 설계 상 문제점을 파악하기 어려워질 수 있다.

  • 알람 등의 경우 상태 검증이 어려우므로 통합 테스트를 고려해볼 수 있지만 SUT가 아닌 다른 곳에 의존성이 생길 수 있어, 행위 검증을 하는게 나을 수도 있다.

출처

https://johngrib.github.io/wiki/test-terms/

https://joont92.github.io/tdd/상태검증과-행위검증-stub과-mock-차이/

Last updated