코드스테이츠_국비교육/[Section3]

54.01_[Spring MVC] 테스팅(Testing)_단위 테스트_22.11.08

생각없이 해도 생각보다 좋다. 2022. 11. 8. 22:58

>테스트
: 최대한 좋은 결과를 얻기 위해 검증하는 것.
: 애플리케이션을 실제 사용하는 제 3자 입장에서 만날 수 있는 에러를 잡기 위한 목적도 있음.

>테스트 영역 별 구분
-기능 테스트
: 애플리케이션 전반적인 기능이 잘 작동하는지 테스트
: 주로 QA 부서(혹은 외부 QA업체)나 프론트 분야에서 진행 
-통합 테스트
: 백엔드 분야(클라이언트를 제외한)의 기능 테스트
: 백엔드 개발자가 직접 진행
: 백엔드 영역의 전부를 테스트하는 개념
-슬라이스 테스트
: 각 계층(layer)을 쪼개서하는 테스트
: API 계층, 서비스 계층, 데이터 액세스 계층
: 백엔드 영역의 일부를 테스트하는 개념
-단위 테스트
: 메서드 단위의 테스트가 대부분
: 사실 데이터베이스 상태를 변경하지 않는 테스트면 단위 테스트라고 부를 수 있지만, 최대한 독릭적이고 작은 단위를 단위 테스트로 취급하는 것이 일반적이다.

>단위 테스트의 목적
: 기존에 하던 PostMan을 사용하는 방식(슬라이스 테스트 정도일듯)은 번거롭고 불필요한 작업이 많았음.
: 단위 테스트로 원하는 부분을 신속하게 효율적으로 테스트할 수 있음.
: 단위 테스트를 미리 해두면 덩치가 커진 코드를 테스트하다 발생하는 버그를 해결하는 시간을 줄일 수 있음.

>테스트 케이스
: 입력 데이터, 실행 조건, 기대 결과를 미리 계획해놓은 테스트 코드
: 입력 데이터를 인자로 주고, 실행 조건에 맞추어 로직을 만들고, 마지막으로 기대 결과랑 비교하여 테스트를 마무리

>단위 테스트를 위한 테스트 케이스 작성 원칙 F.I.R.S.T
1. F, FAST
: 속도가 빨라야한다.
2. I, Independent
: 테스트 케이스 간 영향을 끼치면 안된다.
3. R, Repeatable 
: 어떤 환경에서도 반복 실행이 가능해야 한다. 때문에 외부 서비스 및 외부 리소스의 연동을 끊는 것이 바람직하다.
4. S, Self-validating
: 테스트 케이스만으로 단위 테스트의 성공 혹은 실패의 결과를 알 수 있어야 한다.
5. T, Timely
: 기능 구현 전에 테스트 먼저 작성하는 것이 좋다. 처음엔 어렵기 때문에 연습이 필요하다. 하지만 기능 구현보다 테스트를 먼저 만들고 기능과 같이 테스트도 업그레이드 시키는 방향이 좋다.

>단위 테스트 적용 (without JUnit)
: JUnit는 테스트 프레임워크 중 하나이고 이후에 테스트 작성을 위해 자주 쓸 것.
: JUnit 을 이용하기 전에 JUnit 없이 감을 잡는 적용 방법 습득.

>Given-When-Then 표현 스타일
: BDD(Behavior Driven Development)테스트 방식에서 사용되는 용어
-Given
: 테스트의 전제 조건 명시
: 테스트 대상에 전달되는 입력 값 포함
-When
: 테스트 할 대상 지정
: 일반적으로 테스트 할 메서드를 호출하고 받는 지점
-Then
: 테스트 결과 검증 영역
: 예상 값(expected)과 동작 수행 결과(actual)을 비교하여 검증(assertion)하는 부분