테스트란?
개발자가 예상한 대로 코드가 정확하게 동작하는지 확인하는 것이다.
테스트의 필요성
-
개발 시간을 단축할 수 있다.
- 불필요하게 수작업하여 테스트하지 않고 코드 상에서 테스트할 값만 넣어 확인할 수 있다.
-
문서로서의 역할을 할 수 있다.
- 메소드가 요구사항대로 작동하는지 확인이 가능하다. 그래서 처음 코드를 보는 개발자들도 테스트 코드를 통해 코드 동작을 수월하게 이해할 수 있다.
-
유연하다.
- 코드를 수정할 시 기존 기능에 영향을 미치는지 쉽게 확인할 수 있다.
-
버그를 잡을 수 있다.
- 이전 작성한 단위 테스트가 제대로 동작한다면 신규 작업한 코드의 문제이므로 문제점을 빠르게 파악하고 대응할 수 있다.
테스트 종류
-
단위 테스트(Unit Test) 최소의 기능(모듈)이 의도한 로직을 따라 수행되는지 테스트한다.
- service 테스트, entity 테스트 ...
- @WebMvcTest, @DataJpaTest, ...
- FIRST 규칙
- Fast : 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다.
- Independent : 각각의 테스트는 독립적이고 서로 의존하면 안된다.
- Repeatable : 어떤 환경에서도 반복할 수 있어야 한다.
- Self-Validating : 테스트는 성공 또는 실패로 boolean 값으로 결과를 내어 자체적으로 검증되어야 한다.
- Timely : 테스트를 통과하는 프로덕션 코드가 작성되기 이전에 작성해야 한다.
-
통합 테스트(Integration Test) 모듈 간에 상호 작용 검증을 못하는 단위 테스트의 한계를 극복하기 위한 테스트이다.
- @SpringBootTest : 스프링 IoC, DB CRUD 사용하기 위해 선언해야 한다.
- @Order() : 파라미터 안에 숫자를 넣어 테스트의 순서를 정할 수 있는 어노테이션이다.
-
인수 테스트(Acceptance Test) 사용자 시나리오에 맞춰 수행하는 테스트이다.
- 누가, 어떤 목적으로, 무엇을 하는가를 시나리오로 작성한다.
- E2E 형식 이용하여 확인한다.
- RestAssured, MockMvc
자바 테스트 라이브러리
-