-
토비의 스프링 2. 테스트공부일기/스프링 2021. 5. 16. 14:21
UserDaoTest 다시보기
테스트의 유용성
테스트란 내가 예상하고 의도했던 대로 코드가 정확하게 동작하는지 확인해 만든 코드를 확신할 수 있게 해주는 작업이다.
작은 단위의 테스트
테스트하고자 하는 대상이 명확하다면 그 대상에만 집중해서 테스트하는 것이 바람직하다. 테스트는 가능하면 작은 단위로 쪼개서 해야 정확한 원인을 찾기 쉽다.(테스트의 관심사 분리)
단위 테스트
단위 테스트에서 단위는 그 크기와 범위가 어느 정도인지 정확하게 정해진 건 아니다. 크게봐서 사용자 관리 기능을 하나의 단위로 볼 수도 있고, 작게 보면 add()와 같은 메소드 하나를 단위라고 생각할 수도 있다. 충분히 하나의 관심에 집중해 효율적으로 테스트할 만한 범위의 테스트를 단위 테스트라 할 수 있다.
일반적으로 단위는 작을수록 좋다. 작은 단위로 나눠서 하는 테스트는 개발자가 설계하고 만든 코드가 의도대로 동작하는지 개발자 스스로 빨리 확인할 수 있게 한다.DI와 테스트
인터페이스를 두고 DI를 적용해야 하는 이유 3가지
- 소프트웨어 개발에서 절대로 바뀌지 않는 것은 없다. 당장 클래스를 바꿔서 사용할 계획이 전혀 없더라도, 언젠가 변경이 필요한 상황에서 수정에 들어가는 시간과 비용의 부담을 줄일 수 있다.
- 클래스의 구현 방식은 바뀌지 않아도 인터페이스를 두고 DI를 적용하게 하면 다른 차원의 서비스 기능을 도입할 수 있다. 새로운 기능을 넣기 위해 기존 코드를 수정할 필요가 없다.
- 효율적인 테스트를 손쉽게 만들기 위해서이다. DI는 테스트가 작은 단위의 대상에 대해 독립적으로 만들어지고 실행되게 한다.
DI를 이용한 테스트 방법 선택
항상 스프링 컨테이너 없이 테스트할 수 있는 방법을 가장 우선적으로 고려한다.
학습테스트
학습 테스트의 장점
- 다양한 조건에 따른 기능을 쉽게 확인할 수 있다.
- 학습 테스트 코드를 개발 중에 참고할 수 있다.
- 프레임워크나 제품 업그레이드시 호환성 검증을 도와준다.
...
정리
- 테스트는 자동화돼야 하고, 빠르게 실행할 수 있어야 한다.
- 테스트 결과는 일관성이 있어야 한다. 코드의 변경 없이 환경이나 테스트 실행 순서에 따라서 결과가 달라지면 안 된다.
- 테스트는 포괄적으로 작성해야 한다. 충분한 검증을 하지 않는 테스트는 없는 것보다 나쁠 수 있다.
- 코드 작성과 테스트 수행의 간격이 짧을수록 효과적이다.
- 테스트하기 쉬운 코드가 좋은 코드다.
- 테스트 코드도 애플리케이션 코드와 마찬가지로 적절한 리팩토링이 필요하다.
- @Before, @After를 사용해서 테스트 메소드들의 공통 준비 작업과 정리 작업을 처리할 수 있다.
- 스프링 테스트 컨텍스트 프레임워크를 이용하면 테스트 성능을 향상시킬 수 있다.
- 동일한 설정파일을 사용하는 테스트는 하나의 애플리케이션 컨텍스트를 공유한다.
- @Autowired를 사용하면 컨텍스트의 빈을 테스트 오브젝트에 DI 할 수 있다.
- 기술의 사용 방법을 익히고 이해를 돕기 위해 학습 테스트를 작성하자.
- 오류가 발견될 경우 그에 대한 버그 테스트를 만들어두면 유용하다.
'공부일기 > 스프링' 카테고리의 다른 글
Spring REST Docs 적용 (0) 2021.07.26 토비의 스프링 - 1. 오브젝트와 의존관계(2) (0) 2021.05.13 토비의 스프링 - 1. 오브젝트와 의존관계(1) (0) 2021.05.01