- Repoistory -> Service -> Controller 순으로 개발한다.
- 다른 계층에 대한 의존성이 거의 없기 때문에
- 접근 방법
- 가짜로 구현하기: 최대한 빨리 테스트를 통과하기 위해 정답이 아닌 가짜 정답을 구현하는 방법
- 삼각측량법: 값이 다른 여러 테스트를 작성하고, 이를 일반화하여 정답을 구현하는 방법
- 명백하게 구현하기: 정답을 바로 구현하는 방법
- 테스트를 위해 구현 설계가 변경될 수 있다.
- 테스트 코드는 구현의 보조 수단이 절대 아니다.
- 항상 같은 결과가 반환되는 함(순수함수) 가 테스트하기 좋은 코드
나쁜 테스트 코드
제어할 수 없는 값에 의존하는 경우,
- Random(), new Date() (LocalDate.now()) 와 같이 실행할때마다 결과가 다른 함수에 의존하는 경우
외부에 영향을 주는 코드
- 데이터베이스가 필요
- 데이터베이스를 사용하는 테스트들은 느린 테스트의 주범
- Asyc함수
해결법
- 테스트하기 어려운 코드와 테스트하기 쉬운 코드를 분리
- 제어할 수 없는 값을 외부에서 주입받도록 한다.
단위테스트 코드를 짜는 이유
테스트가 가능한 코드를 만든다는 것은 결국, 테스트하기 쉽게 만들어진 코드를 만드려고 노력한다는 것이라고 할 수 있다. 이렇게 개발하다보면, 각 모듈의 역할이 단순해지고 명확해진다. 즉 모듈의 크기를 줄일 수 있게 되고 모듈과 계층 간의 커플링을 적게 만들어 결국 프로젝트의 유지보수와 확장을 더 쉽게 한다. 그렇기 때문에, 아래와 같은 장점이 있다.
'테스트' 카테고리의 다른 글
(나만을 위한)댓글 생성 메소드 테스트 구현 고민과정 (0) | 2024.04.07 |
---|---|
[Trasactional] 자바 스케줄러 테스트 시도 과정 (0) | 2024.03.28 |
통합, 단위 테스트 차이 (0) | 2023.10.13 |