Skip to content

Solitary and Sociable Test

장민석 edited this page Apr 22, 2024 · 1 revision

개요

유닛 테스트는 소프트웨어 개발에서 중요한 역할을 합니다. 하지만, 유닛 테스트의 범위와 방식에 따라 두 가지 주요 접근 방식이 존재합니다: 사교적 테스트(Sociable Test)와 고립적 테스트(Solitary Test). 이 두 가지 접근 방식의 차이점과 각각의 장단점을 이해하는 것은 테스트 설계에 매우 중요합니다.

사교적 테스트 (Sociable Test)

개념

  • 사교적 테스트는 시스템의 다른 부분과 함께 테스트 대상 시스템(SUT, System Under Test)을 테스트합니다. 즉, 협력하는 모듈과 상호작용하며 테스트를 진행합니다.
  • 테스트 더블(Test Doubles)을 최소한으로 사용하거나 아예 사용하지 않습니다.
    (테스트 더블(Test Double)은 유닛 테스트를 수행할 때, 실제 객체를 대체하거나 모방하는 객체를 의미합니다. 테스트 더블을 사용하는 이유는 테스트의 정확성과 효율성을 높이고, 외부 의존성이나 복잡한 상호작용을 최소화하여 테스트를 더욱 견고하게 만드는 것입니다.)

장점

  • 넓은 범위를 커버하며, 전체적인 시스템의 동작을 테스트할 수 있습니다.
  • 더 큰 범위의 리팩토링이 가능하며, 시스템의 emergent behavior를 발견할 수 있습니다.
  • 내부 계약을 정의해야 할 필요가 적으며, 이에 따른 오류의 위험이 줄어듭니다.

단점

  • 테스트 실패 시 문제를 찾기가 어려울 수 있습니다. 시스템의 여러 부분이 연관되어 있기 때문입니다.
  • 테스트의 중복과 반복이 발생할 수 있으며, 이를 줄이기 위한 복잡한 유틸리티 메소드가 필요할 수 있습니다.

고립적 테스트 (Solitary Test)

개념

  • 고립적 테스트는 테스트 대상 시스템을 더 작은 단위로 테스트합니다. 의존성을 모킹(Mock)하여 SUT에만 집중합니다.
  • 특정 계산이나 협력자들의 오케스트레이션을 강조하며, 더 좁은 범위를 테스트합니다.

장점

  • 모듈의 마이크로 디자인에 대한 피드백을 얻을 수 있습니다. 과도한 책임이나 어색한 협력을 감지할 수 있습니다.
  • 테스트가 모듈의 좋은 문서 역할을 하며, 입력과 출력의 예상 행동을 명확하게 보여줍니다.
  • 테스트의 유지보수가 쉽고, 실패 시 문제를 쉽게 찾을 수 있습니다.
  • 테스트의 중복 및 반복이 줄어듭니다.

단점

  • 더 좁은 범위로 인해 시스템 전체의 동작을 파악하기 어려울 수 있습니다.
  • 내부 계약에 대한 의존도가 높아지며, 이에 따른 오류의 위험이 있습니다.