Framework/Spring
💡 개발자 테스트 코드 작성 시 장/단점과 테스트 종류 별 (단위 테스트, 통합 테스트, E2E 테스트) 로 특징은?
hyukon
2022. 8. 1. 22:38
테스트 코드의 장단점
- 장점
- 예상 동작과 실제 동작을 빠르고 정확하게 테스트 가능하다
- 테스트의 자동화가 가능하다
- 리팩토링 후 기존 동작에 문제가 없는지 보장해 준다.
- 단점
- 테스트 코드 작성 시간이 추가되어 개발 시간이 오래 걸림
- 코드가 변경되면 테스트 코드도 이에 맞추어 변경해야 하므로 테스트코드를 유지보수하는 비용이 추가된다.
단위 테스트란
단위 테스트는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 모듈이란 애플리케이션에서 작동하는 하나의 기능 또는 메소드이다. 일반적으로 실무에서 테스트 코드는 단위 테스트를 의미한다.
단위 테스트 작성의 필요성
- 문제 발생 시 어느 부분이 잘못되었는지를 빠르게 확인할 수 있다.
- 프로그램을 작은 단위로 쪼개 각 단위가 정확하게 동작하는지 확인 할 수있다.
- 리펙토링하여도 빠르게 문제 여부를 파악해 안정성을 확보할 수 있다.
- 테스트에 대한 시간과 비용을 절약할 수 있다.
단위 테스트의 특징
일반적으로 요구 사항은 계속해서 변하므로 이에 따라 코드 및 테스트 코드도 변경되어야 한다. 따라서 테스트 코드는 가독성이 있게 작성하는 것을 기본으로 해야 한다.
- 1개의 테스트 함수에 대해 assert를 최소화한다.
- 1개의 테스트 함수는 1가지 개념만 테스트 한다.
좋고 깨끗한 테스트 코드는 FIRST라는 규칙을 따라야 한다.
- Fast : 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
- Independent : 각각의 테스트느독립적이며 서로 의존해서는 안된다.
- Repeatabele : 어느 환경에서도 반복 가능해야 한다.
- Self-Validationg : 테스트는 bool 값으로 결과를 내어 자체적으로 검증되어야 한다.
- Timely : 실제 코드를 구현하기 직전에 구현해야한다.
개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나,웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다.
이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다.
자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.
통합 테스트란
일반적으로 애플리케이션은 여러 개의 모듈들로 구성이 되고, 모듈들끼리 메세지를 주고 받으면서 기능을 수행한다. 따라서 통합 테스트는 두 개 이상의 모듈이 연결된 상태에서 테스트하는 것을 말한다.
통합 테스트의 특징
- 모듈 간의 연결에서 발생하는 에러를 검증 가능하다
- 단위 테스트보다 많은 코드를 테스트하므로 문제 발생 위치를 찾는 것이 어렵다.
- 여러 모듈이 동시 다발적으로 테스트를 수행하므로 일반적으로 교육받은 전문 테스터와 함께 하게된다.
E2E(end to end) 테스트란
테스트를 사용자 관점에서 테스트하는 방법으로 실제 사용자의 실행 환경과 거의 동일한 환경에서 테스트를 진행하는 것을 말한다. Endpoint 간 테스트로 사용자의 입장에서 사용자가 사용하는 상황을 가정한다.
예를 들면 버튼을 클릭할시 올바른 동작을 수행하는지 url이 제대로 나타나는지 등의 테스트이다.
E2E 테스트의 특징
- 일반적으로 웹이나 어플에서 GUI를 통해 테스트를 수행한다.
- 사용자가 직접적으로 사용하는 부분을 점검한다.
- 사용자의 관점에서 테스트가 가능하다.
- 다양한 앱의 의존관계가 정확이 작동하는지 확인 할 수 있다.
테스트 라이브러리
- spring-boot-starter-test
- junit: 테스트 프레임워크
- mockito: 목 라이브러리
-assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
spring-test: 스프링 통합 테스트 지원