들어가기 전 이 글은 단위 테스트 2장, 단위 테스트란 무엇인가를 공부하며 작성한 글입니다. 2.1 '단위 테스트'의 정의 단위 테스트는 다음 세 가지 조건을 모두 만족시키는 테스트다. 작은 코드 조각(단위)를 검증한다. 빠르게 수행되어야 한다. 격리된 방식으로 처리되어야 한다. 여기서 얼마나 작은 조각인지와 어떻게 격리되어야 하는지는 사람마다 서로 다른 관점이 있다. 아래 장에서 그 부분을 살펴보고자 한다. 2.1.1 격리 문제에 대한 런던파의 접근 런던파는 격리를 통해 하나의 '클래스'에만 집중하는 단위 테스트를 작성한다. 이를 달성하기 위해 값 객체를 제외한 모든 의존성을 모두 테스트 대역(Mock)으로 바꿔치기해서 테스트 한다. 이렇게 테스트 했을 때의 장점은 다음과 같다. 테스트가 실패하면 코드..
들어가기 전 이 글은 단위 테스트 11장, 단위 테스트 안티 패턴을 공부하며 작성한 글입니다. 11. 단위 테스트 안티패턴 안티패턴은 '겉으로는 적절한 것처럼 보이지만' 나중에 더 큰 문제로 돌아올 패턴들을 의미한다. 이 장에서는 그것들을 작성해보고자 한다. 11.1 비공개 메서드 단위 테스트 결론부터 말하면 비공개 메서드 단위 테스트는 하지 않는 것이 맞다. 왜냐하면 비공개 메서드는 구현 세부 사항이기 때문이다. 그런데 꼭 테스트를 해야하는 상황이라면 비공개 메서드는 잘못 작성된 비공개 메서드다. 자세한 내용은 아래에서 볼 수 있다. 11.1.1 비공개 메서드와 테스트 취약성 단위 테스트는 식별할 수 있는 동작만 테스트 한다. '식별할 수 있는 동작'과 '공개 API'가 일치해야 좋은 코드라고 이야기를..
데이터베이스를 포함한 통합 테스트 통합 테스트는 일반적으로 어플리케이션 외부 프로세스와의 통신까지 고려한다. 가장 대표적인 프로세스는 데이터베이스인데, 데이터베이스를 포함한 동작 단위로 테스트 하는 것을 통합 테스트 중 하나로 고려한다. 데이터베이스를 포함한 통합 테스트에서는 다음 사항을 고려해서 테스트 해보면 좋다. 테스트 케이스마다 데이터베이스의 격리 보장 실제 운영 환경에 적합한 환경을 제공하는가 아래에서 내용을 조금 더 고려해보자. 테스트 케이스마다 데이터베이스의 격리 보장 테스트 케이스마다 데이터베이스의 격리가 보장되어야 하는 것은 중요하다. 왜냐하면 어떤 테스트의 결과가 다른 테스트에 영향을 미친다면 테스트를 할 때 마다 다른 결과가 나올 것이다. 예를 들어 A, B라는 테스트가 있고 A 테스..
들어가기 전 이 글은 단위 테스트 10장 데이터베이스 테스트를 공부하며 작성한 글입니다. 10. 데이터베이스 테스트 통합 테스트에서 중요한 부분 중 하나는 데이터베이스 테스트다. 실제 데이터베이스를 테스트하면 회귀 방지가 아주 뛰어나지만 유지 보수 및 설정하기가 쉽지 않다. 이 장에서는 데이터베이스 테스트를 잘 하는 방법, 어디까지 해야하는지를 알아보고자 한다. 10.2.2 다른 컨텍스트에서 테스트 하기 데이터베이스를 테스트 할 때는 실제 운영환경에 가깝게 테스트를 해야하는 것이다. 즉, 테스트 코드를 작성할 때 입력과 실행 환경의 컨텍스트를 서로 다르게 가져가서 테스트 해야한다는 것이다. 예를 들어 JPA를 들어보자. JPA는 영속성 컨텍스트가 있다. 이것을 바탕으로 고민해보자. 실행 전, DB에 입력..
들어가기 전 이 글은 단위 테스트 9장 Mock 처리에 대한 모범 사례를 공부하며 작성한 글입니다. 9. 목처리에 대한 모범 사례 Mock은 테스트 대상 시스템과 의존성 간의 상호 작용을 모방하고 검사하는데 도움이 되는 테스트 대역이다. Mock은 비관리 의존성(외부 어플리케이션에서 식별할 수 있음)에만 적용해야한다. 다른 의존성에도 Mock을 적용하면 리팩토링 내성이 낮은 테스트가 된다. 이 장에서는 Mock을 사용할 때 리팩토링 내성과 회귀 방지를 최대화하는 방법을 공부해보고자 한다. 아래에서는 다섯 가지 사례를 공부한다. 비관리 의존성에만 목 적용하기 시스템 끝에 있는 의존성에 대해 상호 작용 검증하기 통합 테스트에서만 목을 사용하고 단위 테스트에서는 하지 않기 항상 목 호출 수 확인하기 보유 타입..