작성한 코드
나 비즈니스 로직 자체
를 테스트하기 위해 작성하는 코드
미리 발견 가능
리팩토링의 리스크
가 줄어듬명세 문서
로서의 기능을 함(협업 : 코드 합칠때 편리)코드가 작성된 목적을 명확하게 표현 가능
, 불필요한 내용이 추가되는 것 방지테스트 대상 범위를 기준으로 분류
단위 테스트
: 애플리케이션의 개별 모듈을 독립적으로 테스트
통합 테스트
: 애플리케이션을 구성하는 다양한 모듈을 결합해 전체적인 로직이 의도하는 대로 동작 하는지 테스트 하는 방식
단위테스트는 메서드 단위
로 테스트를 수행하게 되며, 메서드 호출
을 통해 의도한 값이 나오는지 확인
통합 테스트는 여러 모듈을 함께 테스트
해서 정상적인 로직 수행이 가능한지 확인
단위 테스트는 DB나 Network같은 외부 요인을 제거하고 진행하는 데 반해 통합 테스트는 외부 요인들을 포함하고 테스트를 진행
하므로 애플리케이션이 온전히 동작하는지 테스트
테스트 비용이 크다는 단점 존재
Given
: 테스트를 수행하기 전에 필요한 환경을 설정하는 단계
-> 테스트에 필요한 변수 정의, Mock객체를 통해 특정 상황에 대한 행동을 정의
when
: 테스트의 목적을 보여주는 단계, 실제 테스트 코드 포함되며, 테스트를 통한 결과값 가져옴
Then
: 테스트의 결과를 검증하는 단계, When 단계에서나온 결과값 검증
-> 결과값이 아니더라도 테스트를 통해 나온 결과를 검증해야 하는 부분 또한 포함
BDD(Behavior-Driven-Development)를 통해 탄생한 테스트 접근 방식
보통 단위테스트에 적용할 수 있는 규칙
Fast
: 테스트가 느리면 개선 작업이 늦어져 코드 품질 떨어짐
ex) 목적을 단순하게 설정해서 작성, 외부 산경 사용하지 않는 단위 테스트 작성
isolated
: 하나의 테스트 코드는 목적으로 여기는 하나의 대상에 대해서만 수행되어야
ex) 다른 테스트코드와 상호작용하거나, 관리할 수 없는 외부 소스 사용 시 테스트 수행 안될수도
Repeatable
: 어떤 환경에서도 반복 가능하도록 작성(개발환경, 네트워크 연결 여부)
Self-Validating
: 테스트 자체만으로도 테스트 검증이 완료되어 햔다
ex) 테스트가 성공했는지 실패했는지 확인할 수 있는 코드를 함께 작성해야, 개발자가 직접 확인하고 있다면 좋지 못한 테스트 코드
Timely
: 테스트하려는 애플리케이션 코드를 구현하기 전에 완성되어야 함, 보통 TDD의 경우
자바에서 사용되는 대표적인 테스트 프레임워크(단웨 테스트 및 통합 테스트 위한 도구 제공)
어노테이션 기반의 테스트 방식 지원
단정문(Assert)를 통해 테스트 케이스의 기대값이 정상적으로 도출되었는지 검토할 수 있다는 장점
Jupiter, Platfrom, Vintage
JUnit Platform
: JVM 테스트를 시작하기 위한 뼈대 역할, 테스트를 계획하고 생성하는 테스트 엔진 인터페이스
가짐
테스트 엔진은 테스트를 발견하고 테스트를 수행하여, 결과를 보고하는 역할
JUnit Jupiter
: 테스트 엔진 API의 구현체 포함, Jupiter 기반 테스트를 실행하기 위한 테스트 엔진 가짐
JUnit Vintage
: JAVA 3,4에 대한 테스트엔진 API 포함
Platform모듈을 기반으로 Jupiter,Vintage 모듈이 구현체 역할 수행