mock stub - xx10222/selab-todo-list GitHub Wiki
Test를 할 때는 Mock 객체를 사용한다
- 외부 시스템에 의존하지 않고 자체 테스트를 실행할 수 있기에 사용한다
- 유닛 테스트는 네트워크나 데이터베이스가 연결이 안된다 하더라도 유닛 테스트는 가능해야 되기에 사용한다
- 실제 데이터베이스를 사용하게 되면 테스트를 할 때마다 DB에 값이 추가되고, 수정하거나 삭제되는 일이 이루어지기 때문에 좋지않다
- DB에는 민감한 정보가 포함되어 있는 경우도 많고, 서비스에 사용되는 데이터가 함부로 변경되면 안되기 때문에 테스트를 할 때도 실제 DB에 연결하지 않는다
- 상태 기반의 테스트 : 특정 메서드를 거친 뒤 객체의 상태에 대해 예상값과 비교하는 방식
- 행위 기반의 테스트 : 특정 행위를 수행했는지 확인하는 방식 (리턴 방식이 void이거나 예상된 동작을 보장할 수 없을 때)
- Mock은 행위 기반의 테스트로 다음과 같은 경우에 사용된다
- 테스트 환경 구축에 많은 시간이 소요되거나 환경 모듈 구축이 어려운 경우 (데이터베이스 연동, 모듈 문제)
- 테스트 시간 단축이 필요한 경우 (네트워크 간 연동 모듈 접속 시간이 오래 걸리는 경우)
- 테스트의 의존성을 단절시켜야 하는 경우
- 타 부서와의 협의 또는 정책이 필요한 경우
- 실제 객체가 비결정적인 행위를 보일 때
- 실제 객체가 UI를 가지고 있거나 그 자체일 대
- 아직 실제 객체가 없을 때
- TestDouble이란 테스트를 수행하기 위해서 실제 컴포넌트 역할을 대체하는 기능을 가진 객체 혹은 컴포넌트를 뜻한다