본문 바로가기

9

테스트 더블과 모의 객체 (with mockito 예제) 이펙티브 소프트웨어 테스팅 - 마우리시오 아니시 6장 테스트 더블과 모의 객체 참고 작성 글 테스트 대역 (목 과 스텁) 이펙티브 소프트웨어 테스팅은 처음 펼쳐봤는데 단위테스트(블라디미르 코리코프) 책에서 단위테스트를 고전파와 런던파로 나눠서 설명했던 것이 떠올랐다. 설명을 가져와 보면 다음과 같다. 단위 테스트의 고전파와 런던파 고전적 접근법은 '디트로이트(Detroit)'라고도 하며, 때로는 단위 테스트에 대한 고전주의적(classicist)접근법이라고도 한다. 아마도 고전파의 입장에서 가장 고전적인 책은 켄트 백(Kent Beck)이 지은 "테스트 주도 개발"일 것이다. 런던 스타일은 때때로 '목 추종자(mockist)'로 표현된다. 목 추종자라는 용어가 널리 퍼져 있지만, 런던 스타일을 따르는 사.. 2023. 9. 27.
단위 테스트 안티 패턴 – 11장 1 비공개 메서드 단위 테스트 비공개 메서드는 어떻게 해야할까? 결론 부터 이야기 하면 '전혀 하지 말아야 한다'. 1.1 비공개 메서드와 테스트 취약성 단위 테스트를 하려고 비공개 메서드를 노출하는 것은 "식별할 수 있는 동작만 테스트 하라" 라는 기본 원칙을 위반한다. 비공개 메서드를 노출하면 테스트가 구현 세부 사항과 결합되고 결과적으로 리팩터링 내성이 덜어진다. 비공개 메서드를 직접 테스트하는 대신, 포괄적인 식별할 수 있는 동작으로서 간접적으로 테스트 하는 것이 좋다. 1.2 비공개 메서드와 불필요한 커버리지 때로는 비공개 메서드가 너무 복잡해서 식별할 수 있는 동작을 일부로 이를 테스트하기에는 충분한 커버리지를 얻을 수 없을 경우가 있다. 식별할 수 있는 동작에 이미 합리적인 테스트 커버리지가.. 2023. 9. 23.
목 처리에 대한 모범 사례 - 9장 9장 목 처리에 대한 모범 사례 단위테스트 (블라디미르 코리코프) 9장에서 다루는 내용 목의 가치를 극대화하기 목을 스파이로 교체하기 목 처리에 대한 모범 사례 목은 테스트 대상 시스템과 의존성 간의 상호 작용을 모방하고 검사 하는 데 도움이 되는 테스트 대역이다. 목은 비관리 의존성(외부 애플리케이션에서 식별할 수 있음)에만 적용해야 한다. 다른 것에 목을 사용하면 깨지기 쉬운 테스트(리팩터링 내성이 없는 테스트)가 된다. 이번 장에서는 목에 대해 리팩터링 내성과 회귀 방지를 최대화해서 최대 가치의 통합 테스트를 개발하는 데 도움이 되는 지침을 마저 알아본다. 먼저 일반적인 목 사용법과 그 단점을 알아보고, 단점을 극복할 수 있는 방법을 살펴본다. 9.1 목의 가치를 극대화하기 비관리 의존성에만 목을 .. 2023. 9. 21.
8장 통합 테스트를 하는 이유 (3) : 언제 인터페이스를 써야할까? + 통합 테스트 작성 팁 8장 통합 테스트를 하는 이유 (3) 단위테스트 (블라디미르 코리코프) 8.4 의존성 추상화를 위한 인터페이스 사용 8.4.1 인터페이스와 느슨한 결합 많은 개발자가 데이터베이스나 메시지 버스와 같은 프로세스 외부 의존성을 위해 인터페이스를 도입한다. 심지어 인터페이스에 구현이 하나만 있는 경우에도 그렇다. 이 관습은 널리 퍼져 있어서 아무도 의문을 제기하지 않는다. 예시는 다음과 같다. public interface ImessageBus public class MessageBus : IMessageBus public interface IUserRepository public class UserRepository : IUserRepository 인터페이스를 사용하는 일반적인 이유 다음과 같다. 프로세스 .. 2023. 9. 15.
8장 통합 테스트를 하는 이유 (2) : 언제 목을 써야할까? + 예시 8장 통합 테스트를 하는 이유 (2) 단위테스트 (블라디미르 코리코프) 8.2 어떤 프로세스 외부 의존성을 직접 테스트해야 하는가? 통합 테스트는 시스템이 프로세스 외부 의존성과 어떻게 통합하는지를 검증한다. 검증을 구현하는 방식은 두 가지가 있다. 실제 프로세스 외부 의존성을 사용 해당 의존성을 목으로 대체 두 가지 방식을 언제 적용해야 하는지에 대해 알아보자. 8.2.1 프로세스 외부 의존성의 두 가지 유형 모든 프로세스 외부 의존성은 두 가지 범주로 나뉜다. 관리 의존성 (전체를 제어할 수 있는 프로세스 외부 의존성): 이러한 의존성은 애플리케이션을 통해서만 접근할 수 있으며, 해당 의존성과의 상호 작용은 외부 환경에서 볼 수 없다. 대표적인 예로 데이터베이스가 있다. 외부 시스템은 보통 데이터베이.. 2023. 9. 14.
5장 목과 테스트 취약성 (4) 3 목과 테스트 취약성과의 관계 이번 절에서 알아 볼 것 - 육각형 아키텍처 (hexagonal architecture) - 내부 통신과 외부 통신의 차이점 - 목과 테스트 취약성 관의 관계 3.1 육각형 아키텍처 정의 육각형 아키텍처는 앨리스터 코오번(Alistair Cockburn) 에 의해 처음 소개되었다. 전형적인 애플리케이션은 도메인(비지니스 로직)과 애플리케이션 서비스라는 두 계층으로 구성된다. 도메인 계층은 애플리케이션의 중심부이기 때문에 도표의 중앙에 위치한다. 도메인 계층은 필수 기능으로 비즈니스 로직이 포함되어 있다. 애플리케이션 서비스 계층은 도메인 계층 위에 있으며 외부 환경과의 통신을 조정한다. 애플리케이션의 API에 대한 모든 요청이 먼저 애플리케이션 서비스 계층에 도달한다. 애.. 2023. 7. 5.