mock stub - xx10222/selab-todo-list GitHub Wiki

테스트코드 작성하기

Test를 할 때는 Mock 객체를 사용한다

  • 외부 시스템에 의존하지 않고 자체 테스트를 실행할 수 있기에 사용한다
  • 유닛 테스트는 네트워크나 데이터베이스가 연결이 안된다 하더라도 유닛 테스트는 가능해야 되기에 사용한다
  • 실제 데이터베이스를 사용하게 되면 테스트를 할 때마다 DB에 값이 추가되고, 수정하거나 삭제되는 일이 이루어지기 때문에 좋지않다
  • DB에는 민감한 정보가 포함되어 있는 경우도 많고, 서비스에 사용되는 데이터가 함부로 변경되면 안되기 때문에 테스트를 할 때도 실제 DB에 연결하지 않는다

상태 기반의 테스트 (Test Double) vs 행위 기반의 테스트 (Mock)

  • 상태 기반의 테스트 : 특정 메서드를 거친 뒤 객체의 상태에 대해 예상값과 비교하는 방식
  • 행위 기반의 테스트 : 특정 행위를 수행했는지 확인하는 방식 (리턴 방식이 void이거나 예상된 동작을 보장할 수 없을 때)

Mock Object를 이용한 테스트 (행위 기반의 테스트)

  • Mock은 행위 기반의 테스트로 다음과 같은 경우에 사용된다
  • 테스트 환경 구축에 많은 시간이 소요되거나 환경 모듈 구축이 어려운 경우 (데이터베이스 연동, 모듈 문제)
  • 테스트 시간 단축이 필요한 경우 (네트워크 간 연동 모듈 접속 시간이 오래 걸리는 경우)
  • 테스트의 의존성을 단절시켜야 하는 경우
  • 타 부서와의 협의 또는 정책이 필요한 경우
  • 실제 객체가 비결정적인 행위를 보일 때
  • 실제 객체가 UI를 가지고 있거나 그 자체일 대
  • 아직 실제 객체가 없을 때

TestDouble(Mock 제외)를 이용한 테스트 (상대 기반의 테스트)

  • TestDouble이란 테스트를 수행하기 위해서 실제 컴포넌트 역할을 대체하는 기능을 가진 객체 혹은 컴포넌트를 뜻한다 image

각각의 장단점

image

⚠️ **GitHub.com Fallback** ⚠️