beonit.log
로그인
beonit.log
로그인
테스트 더블
이승한
·
2020년 1월 6일
팔로우
0
book
effective testing
0
Book - Effective Unit Testing
목록 보기
3/9
테스트 더블로 할 수 있는 일
테스트 더블의 종류
테스트 더블을 효율적으로 활용하기 위한 지침
스텁
예전의 의미 : 제품 코드가 온전히 준비되기 전까지 사용할 대용품
테스트에서 의미 : 대상 코드를 격리하고, 속도를 개선하고, 예측 불가능한 요소를 제어하고, 특수한 상황을 시뮬레이션하고, 감춰진 정보를 얻어내는 용도
테스트 더블의 위력
테스트 대상 코드와 협력 객체를 잘 분리
테스트 전용 장치가 필요한 이유
테스트 대상 코드를 격리한다. - 코드를 그 외의 모든 코드에서 떼어 놓는다.
테스트 속도를 개선한다.
예측 불가능한 실행 요소를 제거한다. - 결과에 영향을 주는 모든 요소를 결정적으로 만들기 위해서 이다.
특수한 상황을 시뮬레이션 한다.
감춰진 정보를 얻어낸다.
테스트 더블의 종류
스텁 : 원래의 구현을 최대한 단순한 것으로 대체한다.
가짜객체
뒤끝없이 처리한다
진짜 객체의 행동을 흉내낸다.
진짜 객체를 사용할 때 생기는 부수 효과, 연쇄 동작이 일어나지 않도음
경량화 하고 최적화 한것
스파이 : 목격한 일을 기록해 두었다가 나중에 테스트가 확인 할 수 있게 한다.
Mock
예기치 않은 일이 발생하면 바로 실패한다. (예상보다 많이 발생하거나, 적게 발생하거나, 발생하지 않거나)
특수한 형태의 테스트 스파이다.
특정 조건이 발생하면 미리 약속된 행동을 취한다. (고급진 Stub)
테스트 더블 활용 지침
용도에 맞는 도구를 써야 한다.
용도에 맞는 더블을 선택하라. 가장 읽기 쉽게 만들어주는 선택을 하라.
Stub 은 질문하고 Mock 은 행동한다.
준비하고, 시작하고, 단언하라
준비-시작-단언 (AAA, arrange-act-assert)
Given, When, Then (주어진 상황에서 어떤 일이 발생했을 때, 특정 결과를 기다린다)
세 영역중 하나가 비대하다고 느껴진다면, 너무 많은 것을 한꺼번에 검사하는 테스트일 가능성이 높다.
구현이 아닌 동작을 테스트 하라
지극히 사소한 변경 마저도 테스트를 실패하게 하면 안된다.
테스트는 오직 한가지만 검사해야 하고, 그 의도를 명확히 전달하도록 작성되어야 한다.
구현이 아니라 동ㅇ작을 검증하자.
도구선택
Mockito 는 stubbing 과 Verification 을 구분한다.
Jmock 은 테스트 더블의 대상 코드가 그 어떤 것도 자기 마음대로 호출하면 안된다고 믿는다.
Mockito 는 대상 코드가 언젠건 아무것이나 호출해도 된다고 믿는다.
종속 객체를 주입하라
종속 객체들을 PrivateMethod 에 저장하거나, 팩토리 메서드 등을 통해서 외부로 부터 얻도록 해야 한다.
private 을 public 이나 default 로 변경하는 것은 옳지 않다.
종속 객체 주입법을 사용하라. (생성자 주입을 애용하자)
이승한
software develop engineer
팔로우
이전 포스트
좋은 테스트란?
다음 포스트
가독성
0개의 댓글
댓글 작성