Unit Test (단위테스트)
응용프로그램에서 테스트 가능한 가장 작은 소프트웨어
를 실행하여 예상대로 동작하는지 확인하는 테스트
= 어떤 기능이 실행되면 어떤 결과가 나온다 정도의 테스트
- 테스트 대상 단위의 크기 : 일반적으로 클래스 또는 메소드 수준
- 단위의 크기가 작을수록, 단위의 복잡성 낮아짐
- 테스트 대상
단위의 크기를 작게
설정해서
단위테스트를 최대한간단
하고디버깅하기 쉽게
작성해야함!
- 테스트 대상
단위테스트 작성의 필요성
- 테스팅에 대한 시간, 비용 절감
- 새로운 기능 추가 시 수시로 빠르게 테스트 가능
- 리팩토링 시 안정성 확보
- 코드에 대한 문서가 될 수 있음
단위테스트의 문제점
해당 모듈이 다른 객체와 메시지를 주고받는 경우 문제 발생
- 해결 : 가짜 객체(Mock Object) 주입하여 어떤 결과를 반환하라고 정해진 답변 준비시킴 (stub)
TDD (Test-Driven Development, 테스트 주도 개발)
TDD에서 얘기하는 테스트도 단위테스트 의미
좋은 단위테스트!
- 1개의 테스트함수에 대해 assert 최소화하기
- 1개의 테스트함수는 1가지 개념만 테스트하기
- FIRST 규칙
Fast
: 테스트는 빠르게 동작하여, 자주 돌릴 수 있어야함Independent
: 각각의 테스트는 독립적Repeatable
: 어느 환경에서도 반복 가능Self-Validating
: 결과가 bool 값(테스트 성공, 실패)으로 -> 자체적으로 검증되어야 함Timely
: 테스트하려는 실제코드를 구현하기 직전에 구현해야함
=> 내가 개발한 코드를 바로 검증받고, 테스트를 통과하지 못하면 코드 수정해 다시 빠르게 검증받기
수시로 실행 - 검증 - 버그를 잡고, 개발비용을 줄여나가는 것
이 테스트의 가치
Integration Test (통합테스트)
단위테스트보다 더 큰 동작을 달성하기 위해 모듈을 통합하는 과정에서 모듈간의 호환성 확인하는 테스트
- 웹페이지로부터
API를 호출
하여 올바르게 동작하는지 확인 - 개발자가 변경할 수 없는 부분(
외부 라이브러리
등)까지 묶어 검증할 때 사용 DB에 접근
하거나 전체코드와 다양한 환경이 제대로 작동하는지
Reference
https://mangkyu.tistory.com/144
https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/