테스트 코드를 제대로 작성해 본 적 없어, 이번 기회에 개념부터 공부를 하며 한 것들을 정리해 보았다.
목차
1. 테스트 코드란
말 그대로 개발자가 개발한 코드에 대해 검증을 하기 위해 작성하는 코드로 자바에서는 junit이라는 테스트 코드 작성을 위한 프레임워크를 사용한다.
2. Unit 테스트(단위 테스트) 코드 기본 원칙
F - fast : 테스트 코드는 빠르게 실행되어야 한다.
I - Independent : 독립적으로 실행되어야 한다.
R - Repeatable : 반복 가능해야 한다.
S - Self Validating : 스스로 테스트 검증 가능해야 한다
T - Timely : 프로덕션 코드 직전에 작성되어야 한다.(TDD)
3. 왜 테스트 코드를 작성하나
우선 가장 기본적인 이유로는 다음이 있다.
- 코드의 안정성을 높여준다
- 수정 및 추가를 하며 나오는 부작용에 대처하기 좋아진다.
=> 의존 관계가 많거나 복잡한 곳에서 발생한 에러는 대처하기 정말 화난다. - 에러를 잡기 훨씬 수월해진다. => 단위 테스트를 진행하면 세밀하게 문제를 잡기 정말 수월하다.
- 협업 간에 코드에 대한 신뢰도가 좋아진다
⭕ 다음은 실제 작성을 하며 추가로 느낀 것들
- Spring에 대해 공부가 많이 되었다. => 테스트 코드 작성을 하기 위해서 꽤나 많은 Spring 지식이 필요했다.
- 테스트 코드를 작성하고 결과를 도출하는 것들이 수학의 '증명'과 비슷해 보였다.
하지만 결국 테스트 코드의 증명이란 건 대부분 값이 있거나, 같거나, 예외가 발생하거나 등등의 경우가 한정적이다. - 객체지향의 원칙을 잘 지킨고 결합도가 낮은 코드가 테스트 코드를 작성하기도 훨씬 수월하다.
- 테스트 코드 작성은 '권장'보다는 '필수'에 가깝게 느껴졌다.
4. 어떤 식으로 진행하는가
보통 Spring에서 테스트 코드를 작성한다고 하면 단위 테스트와 통합 테스트를 진행한다.
단위 테스트
✅ 단위 테스트는 각각의 레이어 별로(Controller, Service, Repository) 테스트를 진행하기 때문에 단위 테스트라 한다.
- 각각의 계층들이 의존성을 가지면 안 된다.
- 의존성을 없애기 위해 Mock 객체를 사용한다. (자세한 건 추후 설명)
- 컨트롤러 계층은 작성은 복잡한 상황이 아니라면 따로 작성하지 않아도 된다.
- 스프링 컨테이너의 도움을 받지 않는다.
- 부분적인 테스트를 진행하는데 모든 빈이 스프링에 등록되어 버림
- 위의 이유로 테스트 자체의 속도 저하기 심해짐
- 의존성을 가지면 안 되는데 의존 주입을 받을 이유는 더더욱 없음
⭕ 컨트롤러 계층은 따로 포스팅하지 않을거기 때문에 해당 글에서 서술
- 컨트롤러 계층은 요청과 응답, 서비스 계층 호출에 대한 검증을 한다.
- 해당 역할은 통합 테스트를 진행할 때도 똑같이 하게 된다.
- 복잡한 경우가 아니라면 컨트롤러 계층의 테스트 코드 작성은 생략하고 필요한 검증들은 통합 테스트에서 진행
통합 테스트
✅ Controller, Service, Repository 모든 계층의 검증과, 의존, 유효성 등을 모두 진행하는 테스트
- 모든 계층의 의존도 필요하기 때문에 Spring Container의 도움을 받아야 한다.
- 통합 테스트를 위해 알아야 할 어노테이션 및 함수가 매우 많다.
반응형
'Spring > junit5 테스트' 카테고리의 다른 글
[스프링부트] junit 테스트 코드(5/5) - 예외 테스트 (0) | 2023.08.08 |
---|---|
junit 테스트 코드(4/5) - 통합테스트 (0) | 2023.08.01 |
junit 테스트 코드(3/5) - 단위 테스트(RepositoryLayer) (0) | 2023.07.31 |