-
11. 단위 테스트 안티 패턴개발 도서/Unit Testing 2024. 6. 22. 15:13
11.1 비공개 메서드 단위 테스트
11.1.1 비공개 메서드와 테스트 취약성
단위 테스트를 가능하게 하고자 비공개 메서드를 노출하게 되면 테스트가 구현에 결합되고, 결국 리팩터링 내성이 떨어진다.
비공개 메서드를 직접 테스트하는 대신, 식별할 수 있는 동작으로서 간접적으로 테스트하라.11.1.2 비공개 메서드와 불필요한 커버리지
비공개 메서드가 너무 복잡해서 공개 API로 테스트할 수 없다면, 추상화가 누락됐다는 뜻이다.
비공개 메서드를 공개로 하지 말고 해당 추상화를 별도 클래스로 추출하라.11.1.3 비공개 메서드 테스트가 타당한 경우
드물지만, 비공개 메서드가 클래스의 식별할 수 있는 동작에 속한 경우가 있다.
보통 클래스와 ORM 또는 팩토리 간의 비공개 계약을 구현하는 것이 여기에 속한다.11.2 비공개 상태 노출
비공개였던 상태를 단위 테스트만을 위해 노출하지 말라. 테스트는 제품 코드와 같은 방식으로 테스트 대상 시스템과 상호 작용해야 한다. 어떠한 특권도 가져서는 안되기 때문이다.
11.3 테스트로 유출된 도메인 지식
테스트를 작성할 때 특정 구현을 암시하지 말라.
블랙박스 관점에서 제품 코드를 검증하라.
또한 도메인 지식을 테스트에 유출하지 않도록 하라.11.4 코드 오염
코드 오염은 테스트에만 필요한 제품 코드를 추가하는 것이다.
이는 테스트 코드와 제품 코드가 혼재되게 하고 제품 코드의 유지비를 증가시키기 때문에 안티 패턴이다.11.5 구체 클래스를 목으로 처리하기
기능을 지키려고 구체 클래스를 목으로 처리해야 하면, 이는 단일 책임 원칙을 위반하는 결과다.
해당 클래스를 두 가지 클래스, 즉 도메인 로직이 있는 클래스와 프로세스 외부 의존성과 통신하는 클래스로 분리하라.11.6 시간 처리하기
현재 시간을 엠비언트 컨텍스트로 하면 제품 코드가 오염되고 테스트하기가 더 어려워진다.
서비스나 일반 값의 명시적인 의존성으로 시간을 주입하라.
가능하면 항상 일반 값이 좋다.'개발 도서 > Unit Testing' 카테고리의 다른 글
10. 데이터베이스 테스트 (0) 2024.06.21 9. 목 처리에 대한 모범 사례 (1) 2024.06.21 8. 통합 테스트를 하는 이유 (0) 2024.06.20 7. 가치 있는 단위 테스트를 위한 리팩터링 (0) 2024.06.20 6. 단위 테스트 스타일 (0) 2024.06.18