통합 테스트와 단위 테스트

송민지·2024년 10월 1일

단위 테스트

  • 가장 작은 단위의 테스트 방식
  • 메서드 단위로 테스트를 수행하고 의도한 대로 동작하는지 확인하는 방식
    (controller, service, repository가 모두 격리되어 있다)

통합테스트

  • 어플리케이션이 정상적으로 동작하는지, 관련된 모듈을 함께 테스트한다.

테스트를 작성해야 되는 이유

  1. 디버깅 감소
    • 테스트를 하는 과정에서 결함 및 디버깅을 감소 시킬 수 있다
  2. 자유로운 코드 변경
    • 자유롭다해서 막 쓰는 것이 아니다. 테스트코드를 통과한 코드는 메서드나 다른 모듈에서 정상적으로 동작하는것을 확인한 것이기 때문에, 코드 변경이 자유롭다
  3. 좋은 문서자료(?)
    • 해당 테스트를 통해 코드가 어떻게 동작하는지 쉽게 확인이 가능하다.
  4. 단순한 리뷰
    • 테스트코드를 보고 코드리뷰에 쏟는 시간을 줄일 수 있다.

그럼 테스트코드는 만능일까?

정답은 no
테스트 코드를 모두 작성해서 버그가 생기지 않는다는 보장이 없을 뿐더러, 개발자가 생각하지도 못한 가능성도 있다.

좋은 테스트를 위한 원칙

  • Fast : 빨라야 한다
  • Independent : 테스트단위는 연관되어 있는 것이 아닌 고립되어 단독으로 실행되어야 한다
  • repeatable: 반복가능해야 한다. 이때 결과값이 바뀌면 안된다.
  • self - validating : 자체적으로 실행결과가 도출되어야 한다.(System.out.print로 결과값을 보는게 아니다)
  • timeyl : TDD의 경우 실제코드보다 먼저 구현해야 한다.

Given-When-Then

  • Given : 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황 또는 행동을 정의
  • When: 실제 테스트를 하는 메소드가 호출되며 테스트를 통한 결과값을 가져온다
  • Then: When 단계에서 나온 결과값을 검증하는 작업을 수행
profile
항상 밝게

0개의 댓글