단위 테스트란 무엇인가

김민규·2023년 7월 12일
0

단위 테스트

목록 보기
2/4
post-thumbnail

‘단위 테스트’ 정의

  • 작은 코드 조각(단위라고도 함)을 검증하고
  • 빠르게 수행하고
  • 격리된 방식으로 처리하는 자동화된 테스트다.
    • 격리 문제는 고전파와 런던파를 구분할 수 있게 한다.

격리 문제에 대한 런던파의 접근

  • 테스트 대상 시스템(SUT, System Under Test)을 협력자(collaborator)에게서 격리하는 것을 일컫는다.
    • 하나의 클래스가 다른 클래스 또는 여러 클래스에 의존하면 이 모든 의존성으로 테스트 대역(test double)으로 대체해야 한다.
      • 테스트가 실패하면 코드베이스의 어느 부분이 고장 났는지 확실히 알 수 있다.
      • 객체 그래프(object graph)를 분할할 수 있다.

격리 문제에 대한 고전파의 접근

  • 각각의 테스트를 격리하는 것은 여러 클래스가 모두 메모리에 상주하고 공유 상태에 도달하지 않는 한, 여러 클래스를 한 번에 테스트해도 괜찮다는 뜻이다.
  • 테스트 대역을 사용할 수 있지만, 보통 테스트 간에 공유 상태를 일으키는 의존성에 대해서만 사용한다.

단위 테스트의 런던파와 고전파

격리주체단위의 크기테스트 대역 사용대상
런던파단위단일 클래스불변 의존성 외 모든 의존성
고전파단위 테스트단일 클래스 또는 클래스 세트공유 의존성

공유 의존성

  • 공유 의존성(shared dependency)은 테스트 간에 공유되고 서로의 결과에 영향을 미칠 수 있는 수단을 제공하는 의존성이다.
    • ex) 정적 가변 필드(static mutable field), 데이터베이스

한 번에 한 클래스만 테스트하기

테스트는 코드의 단위를 검증해서는 안 된다.
동작의 단위, 즉 문제 영역에 의미가 있는 것, 이상적으로는 비즈니스 담당자가 유용하다고 인식할 수 있는 것을 검증해야 한다.

상호 연결된 클래스의 큰 그래프를 단위 테스트하기

  • 상호 연결된 클래스의 크고 복잡한 그래프를 테스트할 방법을 찾는 대신, 먼저 이러한 클래스 그래프를 갖기 않는 데 집중해야 한다.
    • 대개 클래스 그래프가 커진 것은 코드 설계 문제의 결과다.

버그 위치 정확히 찾아내기

  • 런던 스타일 테스트가 있는 시스템에 버그가 생기면, 보통 SUT에 버그가 포함된 테스트만 실패한다.
  • 고전적인 방식이면, 오작동하는 클래스를 참조하는 클라이언트를 대상으로 하는 테스트도 실패할 수 있다.

고전파와 런던파 사이의 다른 차이점

  • 테스트 주도 개발(TDD, Test-Driven Development)을 통한 시스템 설계 방식
  • 과도한 명세(over-specification) 문제
profile
Backend Engineer, Vim User

0개의 댓글