Search
Duplicate
📒

[Spring TDD] 01-1. 단위 테스트(Unit Test) 작성의 필요성

상태
완료
수업
Spring TDD
주제
Test
4 more properties
참고

단위 테스트 vs 통합 테스트 차이

NOTE
위 그림은 MSA 관점에서의 테스팅 그림인데 우리는 밑에 2개만 보자

code coverage

소프트웨어 테스트시 테스트가 충분한가를 나타내는 지표
코드 자체가 얼마나 실행되었는지 숫자로 확인이 가능

단위 테스트(Unit Test)

NOTE
하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트!
단위 테스트는 이렇게 생겼습니다. (그냥 참고만 하자)
모듈은 애플리케이션에서 작동하는 하나의 기능 또는 메소드
ex) 웹 애플리케이션에서 로그인에 대한 테스트
애플리케이션을 구성하는 하나의 기능이 올바르게 동작하는지를 독립적으로 테스트하는 것이다!
어떤 기능이 실행된다 → 어떤 결과가 나온다 정도로 진행

통합 테스트(Intergration Test)

NOTE
모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트
일반적으로 애플리케이션은 여러 개의 모듈로 구성이 되고, 모듈끼리 메세지를 주고 받으며(함수 호출) 기능을 수행한다.
그렇기에 통합된 모듈들이 올바르게 연계되어 동작하는지 검증이 필요한데, 이러한 목적으로 진행되는 테스트가 통합 테스트.
독립적인 기능이 아닌, 웹 페이지로부터 API 호출이 올바르게 동작하는지 확인

단위 테스트(Unit Test) 개념

단위 테스트의 필요성

NOTE
통합 테스트와 달리, 단위 테스트는 해당 부분만 독립적으로 테스트하기 때문에 어떤 코드를 리팩토링하여도 빠르게 문제를 확인 할 수 있다!
테스팅에 대한 시간과 비용 절감
새로운 기능 추가시에 수시로 빠르게 태스트 가능
리팩토링 시에 안정성을 확보할 수 있다.
코드에 대한 문서가 될 수 있다.

단위 테스트의 문제점과 stub

NOTE
일반적인 애플리케이션에서 1개의 기능을 처리하기 위해서는, 다른 객체들과 메세지를 주고 받아야한다. 하지만 단위테스트는 독립적인 테스트이므로, 가짜 객체(Mock Object)를 중비하여서 어떤 결과를 반환하라고 정해진 답변을 준비시킨다! (stub 개념)
ex) 새로운 데이터를 추가하는 코드를 테스트
가짜 데이터베이스(Mock Database)를 주입하여 insert 처리 시에 반드시 1을 반환하도록 한다.

좋은 단위 테스트의 특징

NOTE
좋은 테스트 코드 = 변경된 코드를 검증할 수 있는 것!
1개의 테스트 함수에 대해 assert를 최소화하라
1개의 테스트 함수는 1가지 개념만을 테스트하라.

FIRST 규칙

1.
Fast : 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
2.
Independent : 각각의 테스트는 독립적이고, 의존해서는 안된다.
3.
Repetable : 어느 환경에서도 반복 가능해야 한다.
4.
Self-Validating : 테스트는 성공 또는 실패로 bool값으로 결과를 내어 자체적으로 검증되어야 한다.
5.
Timely : 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.