들어가기 전 이 글은 단위테스트 8장을 공부하며 작성한 글입니다. 8. 통합 테스트를 하는 이유 단위 테스트는 비즈니스 로직을 확인하는데는 좋지만, 비즈니스 로직을 외부와 단절된 상태로 확인하는 것만으로는 충분하지 않다. 각 부분이 외부 프로세스 의존성과 어떻게 통합되는지를 확인해야, 시스템이 전체적으로 안정적으로 돌아가는지를 확인할 수 있다. 이런 테스트를 '통합 테스트'라고 한다. 8.1 통합 테스트는 무엇인가? 테스트 스위트에서 통합 테스트는 단위 테스트만큼 중요한 역할을 한다. 또한, 적절한 통합 테스트와 단위 테스트의 비율을 맞추면 좋은 테스트 스위트를 구성할 수 있게 된다. 아래에서 통합 테스트에 대해 자세히 살펴본다. 8.1.1 통합 테스트의 역할 단위 테스트는 아래 조건을 모두 만족하는 테..
들어가기 전 이 글은 단위 테스트 7장을 공부하며 작성한 글입니다. 7.1 리팩터링할 코드 식별하기 제품 코드를 리팩토링하지 않고서는 테스트 스위트를 크게 개선할 수 없다. 테스트 코드와 제품 코드가 본질적으로 관련되어 있기 때문이다. 이 절에서는 리팩터링의 방향을 설명하고자 코드를 네 가지 유형으로 분류하는 방법을 소개한다. 7.1.1 코드의 네가지 유형 모든 제품 코드는 다음으로 분류할 수 있다. 복잡도 : 코드 내 의사 결정(분기) 지점 수로 정의함. 결정 지점수가 많을 수록 복잡도는 증가함. 도메인 유의성 : 프로젝트의 문제 도메인에 얼마나 의미있는지를 나타냄. 협력자 수 : 가변 의존성, 프로세스 외부 의존성. 복잡도가 높은 코드, 도메인 유의성이 높은 코드가 테스트할 가치가 가장 크다. 복잡도..
들어가기 전 이 글은 단위 테스트 6장, 단위 테스트 스타일을 공부하며 작성한 글입니다. 6. 단위 테스트 스타일 이번 장에서는 단위 테스트에서 주로 볼 수 있는 테스트 스타일을 살펴보고, 각각이 어떤 특성을 가지고 있는지, 어떤 특성을 선택하면 좋을지를 공부해보고자 한다. 6.1. 단위 테스트의 세 가지 스타일 단위 테스트는 세 가지 스타일이 있다. 출력 기반 테스트 상태 기반 테스트 통신 기반 테스트 하나의 단위 테스트에서 하나만 사용할 수도 있고, 세 가지를 동시에 사용할 수도 있다. 6.1.1 출력 기반 테스트 정의 출력 기반 테스트는 테스트 대상 시스템(SUT)에 입력을 넣고 생성되는 출력을 점검하는 방식이다. 전역 상태나 내부 상태를 변경하지 않는 코드에만 적용되므로 반환값만 검증하면 된다. ..
들어가기 전 이 글은 Unit Testing 5장 목과 테스트 취약성을 공부하며 작성한 글입니다. 5. 목과 테스트 취약성 이번 장에서는 Mock이 취약한 테스트를 만드는 것을 살펴본다. 이 때 취약한 테스트라는 것은 '리팩토링 내성'이 없는 테스트를 의미한다. 그렇지만 Mock을 사용해서 좋은 테스트가 되는 경우도 있다. Mock이 어떻게 취약한 테스트를 만들고, 리팩토링 내성 저하 없이 Mock을 사용하는 방법을 공부한다. 5.1 Mock과 Stub 구분 테스트 대상 시스템 (SUT)와 그 협력자 사이의 상호 작용을 검사할 수 있는 객체들을 테스트 대역이라고 한다. Mock과 Stub은 테스트 대역의 일종이다. Mock, Stub의 구체적인 차이점은 무엇이 있을까? 5.1.1 테스트 대역 유형 테스트..
들어가기 전 이 글은 Unit Testing 4장을 공부하며 작성한 글입니다. 4. 좋은 단위 테스트의 4대 요소 이 장에서는 좋은 단위 테스트를 구성하는 요소들과 예시들에 대해서 살펴보고자 한다. 좋은 단위 테스트 스위트의 특성은 다음과 같다. 개발 주기에 통합되어 있다. 실제로 사용하는 테스트에만 가치가 있다. 코드베이스의 가장 중요한 부분만을 대상으로 한다. 모든 실행 코드에 똑같이 신경쓸 필요가 없다. 최소한의 유지비로 최대 가치를 끌어낸다. 이것을 만족시킬 수 있는 단위 테스트들을 좋은 단위 테스트라고 한다. 아래에서 계속 살펴보겠다. 4.1 좋은 단위 테스트의 4대 요소 자세히 살펴보기 좋은 단위 테스트에는 다음 네 가지 특성이 있다. 각 절에서 아래 특성과 관련된 내용에 대한 상세 설명을 살..