본문 바로가기

Testing7

목 처리에 대한 모범 사례 - 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장 통합 테스트를 하는 이유 (1) 단위테스트 (블라디미르 코리코프) 8장에서 다루는 내용 통합 테스트의 역할 이해 테스트 피라미드의 개념 자세히 살펴보기 가치 있는 통합 테스트 작성 단위 테스트는 비지니스 로직을 확인하는데 좋지만 비지니스 로직을 외부와 단절된 상태로 확인하는 것만으로는 시스템이 전체적으로 잘 작동하는지 확신할 수 없다. 각 부분이 데이터베이스나 메시지 버스 등의 외부 시스템과 어떻게 통합되는지 확인해야 한다. 이 장에서는 통합 테스트의 역할, 즉 언제 적용해야 하는지와 일반적인 단위 테스트나 심지어 빠른 실패(Fail Fast) 원칙과 같은 다른 기법에 의존하는 것이 좋을지 등을 알아본다. 또한 프로세스 외부 의존성 중에서 어느 것을 통합 테스트에서 그대로 사용하고 어느 것을 목으로 대체할지에 대해 판단하는 방법에 대해.. 2023. 9. 13.
소나큐브 설치하기 (with Docker, macOS) 개요 최근에 devops 님께 3개의 sonarqube 프로젝트를 생성해달라는 요청을 드렸었다. devops 님께는 항상 감사한 마음을 가지고 있다. 참 수고가 많으신 것 같다. 요청 드린것은 요청 드린 것이고 한번쯤은 직접 어떤 과정을 통해 진행되는지 확인해보고 싶었다. 참고로 소나큐브는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼이다 라고 위키피디아에 소개되어있다. 본문 설치 환경 이 글에서는 Docker를 이용해서 설치하며, 로컬에 설치하기 때문에 macOS 를 기반으로 설명을 진행한다. 진행 순서 1. 도커 이미지 pull & run 공식홈페이지에 이미지에 따른 pul.. 2023. 8. 2.
7장 가치 있는 단위 테스트를 위한 리팩터링 단위테스트 (블라디미르 코리코프) https://jonghoonpark.com/identifying-the-code-to-refactor 에서 이어지는 글입니다. 복잡한 코드를 알고리즘과 컨트롤러로 나눠보자. 험블 객체 패턴을 사용해 일반화 하는 방법에 대해서 알아보자. 2.1 고객 관리 시스템 소개 사용자 등록을 처리하는 고객 관리 시스템을 샘플로 한다. 모든 사용자는 데이터베이스에 저장된다. 현재 시스템은 사용자 이메일 변경이라는 단 하나의 유스케이스만 지원한다. 이 연산에는 세 가지 비즈니스 규칙이 있다. - 사용자 이메일이 회사 도메인에 속한 경우 해당 사용자는 직원으로 표시된다. 그렇지 않으면 고객으로 간주한다. - 시스템은 회사의 직원 수를 추적해야 한다. 사용자 유형이 직원에서 고객으로, 또.. 2023. 7. 28.
5장 목과 테스트 취약성 (4) 3 목과 테스트 취약성과의 관계 이번 절에서 알아 볼 것 - 육각형 아키텍처 (hexagonal architecture) - 내부 통신과 외부 통신의 차이점 - 목과 테스트 취약성 관의 관계 3.1 육각형 아키텍처 정의 육각형 아키텍처는 앨리스터 코오번(Alistair Cockburn) 에 의해 처음 소개되었다. 전형적인 애플리케이션은 도메인(비지니스 로직)과 애플리케이션 서비스라는 두 계층으로 구성된다. 도메인 계층은 애플리케이션의 중심부이기 때문에 도표의 중앙에 위치한다. 도메인 계층은 필수 기능으로 비즈니스 로직이 포함되어 있다. 애플리케이션 서비스 계층은 도메인 계층 위에 있으며 외부 환경과의 통신을 조정한다. 애플리케이션의 API에 대한 모든 요청이 먼저 애플리케이션 서비스 계층에 도달한다. 애.. 2023. 7. 5.