본문 바로가기

전체 글93

목 처리에 대한 모범 사례 - 9장 9장 목 처리에 대한 모범 사례 단위테스트 (블라디미르 코리코프) 9장에서 다루는 내용 목의 가치를 극대화하기 목을 스파이로 교체하기 목 처리에 대한 모범 사례 목은 테스트 대상 시스템과 의존성 간의 상호 작용을 모방하고 검사 하는 데 도움이 되는 테스트 대역이다. 목은 비관리 의존성(외부 애플리케이션에서 식별할 수 있음)에만 적용해야 한다. 다른 것에 목을 사용하면 깨지기 쉬운 테스트(리팩터링 내성이 없는 테스트)가 된다. 이번 장에서는 목에 대해 리팩터링 내성과 회귀 방지를 최대화해서 최대 가치의 통합 테스트를 개발하는 데 도움이 되는 지침을 마저 알아본다. 먼저 일반적인 목 사용법과 그 단점을 알아보고, 단점을 극복할 수 있는 방법을 살펴본다. 9.1 목의 가치를 극대화하기 비관리 의존성에만 목을 .. 2023. 9. 21.
로깅도 테스트 해야할까 - 8장 통합 테스트를 하는 이유 (4) 8장 통합 테스트를 하는 이유 (4) 단위테스트 (블라디미르 코리코프) 로그도 테스트 해야할까? 로깅(logging)은 회색 지대로, 테스트에 관해서는 어떻게 해야 할지 분명하지 않다. 로깅과 관련해서는 다음과 같은 질문으로 나눌 수 있다. 로깅을 조금이라도 테스트해야 하는가? 만약 그렇다면 어떻게 테스트해야 하는가? 로깅이 얼마나 많으면 충분한가? 로거(logger) 인스턴스를 어떻게 전달할까? 8.6.1 로깅을 테스트해야 하는가? 로깅은 횡단 기능(cross-cutting functionality)으로, 코드베이스 어느 부분에서나 필요로 할 수 있다. 다음은 User 클래스의 로깅 예제다. public class User { public void ChangeEmail(string newEmail, C.. 2023. 9. 19.
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.
[Spring] JSON 기반으로 테스트하기 (테스트 코드의 객체 초기화 부분 줄이기) 개요 최근에 회사 신규 프로젝트의 BE 팀에서 테스트 코드를 작성하기 시작했다. 그래서 코드 리뷰할 때 나도 리뷰어로 넣어줄 수 있냐고 부탁드렸고, 허락해주셔서 코드를 구경하고 있다. 코드를 처음 봤을 때 아쉬웠던 점은 자바라는 언어가 장황한 편이라고는 하지만 객체를 초기화 하는데 너무 많은 코드가 사용되었고 (한 서비스 클래스를 테스트하는데 라인이 1000 줄이 넘어갔다. 줄이 길다고 꼭 나쁜건 아니겠지만 불필요한 부분이 많아보였다.), 이로 인해서 본질인 테스트의 가독성이 떨어진게 아닌가 라는 생각이 들었다. 어디서부터 봐야할지 다소 막막하였다. 일단 그래서 그 부분을 개선할 수 있는 방법이 없을까 싶어 찾아보던중에 아래의 글을 발견하였다. # 테스트 코드 작성에 대한 나름의 고찰 이 글을 작성하신 .. 2023. 9. 14.
8장 통합 테스트를 하는 이유 (1) 단위테스트 (블라디미르 코리코프) 8장에서 다루는 내용 통합 테스트의 역할 이해 테스트 피라미드의 개념 자세히 살펴보기 가치 있는 통합 테스트 작성 단위 테스트는 비지니스 로직을 확인하는데 좋지만 비지니스 로직을 외부와 단절된 상태로 확인하는 것만으로는 시스템이 전체적으로 잘 작동하는지 확신할 수 없다. 각 부분이 데이터베이스나 메시지 버스 등의 외부 시스템과 어떻게 통합되는지 확인해야 한다. 이 장에서는 통합 테스트의 역할, 즉 언제 적용해야 하는지와 일반적인 단위 테스트나 심지어 빠른 실패(Fail Fast) 원칙과 같은 다른 기법에 의존하는 것이 좋을지 등을 알아본다. 또한 프로세스 외부 의존성 중에서 어느 것을 통합 테스트에서 그대로 사용하고 어느 것을 목으로 대체할지에 대해 판단하는 방법에 대해.. 2023. 9. 13.