0. 웹 어플리케이션 테스트 - 인덱스

도입

실제 웹서버 어플리케이션의 테스트는 다음과 같은 테스트로 구성될 수 있다. 아래 순서는 좁은 범위 순서로 작성하였으며, 각 테스트는 범위와 목적에 따라 나눠진다는 사실을 인지하고 읽어보자.

좋은 테스트란

좋은 테스트란?

테스트 구분에 대한 인사이트

첨언. 여기서 중요한 점은 실제 테스트에 어떤 계층이 사용되는지에 대한 객관적인 사실보다 테스트하는 범위의 성격에 따라 테스트의 종류(단위, 슬라이스, 통합, 인수 테스트)가 달라진다는 점이다. 즉, 어디까지 검증하는가를 기준으로 테스트를 구분해야 한다.

예를 들어, Account라는 도메인의 "잔액이 올바르게 변경되는가?" 를 테스트하기 위해, updateAmount()를 테스트한다고 가정할 때, 내부에서 사용하는 repository.update()메서드를 위해 repository를 fake 객체로 초기화해서 사용한다 하더라도, 이는 슬라이스 테스트나 통합 테스트가 아닌 단위 테스트이다. 순수 비즈니스 로직을 검증하기 위한 테스트이기 때문이다.

즉, Fake나 Mock을 썼다고 단순히 외부 컴포넌트와 연결되었다고 오해하면 안된다.

단위 테스트 슬라이스 테스트 통합 테스트의 경계`가 모호하게 느껴질 수 있다. 해당 계층을 구분하는 인사이트는 아래 글에서 다룬다.

전체 테스트 종류 인덱스

종류 특징
단위 테스트 객체 하나를 고립해서 검증
슬라이스 테스트 특정 계층만 Spring과 함께 검증
통합 테스트 여러 계층 + 실제 인프라 협력 검증 (여러 컴포넌트가 잘 협력하는가?)
인수 테스트 HTTP부터 DB까지 전체 흐름 검증
E2E 사용자가 실제 요구사항을 수행할 수 있는가 검증

테스트 격리