단위테스트 vs 인수테스트
List의 index 순서가 보장 될까?
sections.set(index, new Section(line, upStation, downStation, distance));
DIP에서 말하는 유연성이 극대화된 시스템
추상 (abstraction)에 의존하며 구체(concretion)에 의존하지 않는 시스템
모든 의존성을 객체 참조로 구현하면?
- 객체 간의 결합도가 높아짐
- 다른 객체로 탐색이 가능해짐
- 디비에서 조회하거나 ORM 사용시 복잡도 증가
어떤 상황에 객체 참조를 사용할까?
- 함께 생성되고 함께 삭제되는 객체들을 함께 묶어라
- 도메인 제약사항을 공유하는 객체들을 함께 묶어라
테스트 하기 쉬운 코드
- 외부 상태를 변경하지 않는 코드
- 같은 입력에 항상 같은 결과를 반환하는 코드
테스트 하기 쉬운 코드로 만들기
- 테스트 하기 쉬운 코드와 어려운 코드를 분리
테스트 환경 without Spring
JUnit5
@ExtendWith
- 단위 테스트간에 공통적으로 사용할 기능 지원하기 위한 애너테이션
테스트 환경 with Spring
SpringExtension.class
- ExtendWith 과 함께 쓰이며, 스프링 컨테이너를 쓸 수 있음
- mock 으로 생성된 객체만 있음, 실제 prod 코드를 가지고 올 수는 없음
@SpringBootTest
- 테스트에서 사용할 Context 구축
- 스프링 기반 서버 환경을 쉽게 설정할 수 있게 도와줌
- 스프링 빈 전체를 사용하여 테스트 할 수 있음
- 모든 빈을 사용하기 때문에 어떤 협력 객체를 등록해야 하는지에 대한 고려를 할 필요가 없음
- 시간이 상대적으로 오래걸릴 수 있음
@WebMvcTest, @DataJpaTest
- WebMvcTest : 인터셉터, 컨트롤러 까지 테스트
- DataJpaTest: Repository 관련 빈을 테스트할 수 있음
문서 자동화
문서 자동화란?
- 문서를 기능과 동기화를 맞추기 어려움
- 이를 해결하기 위해 코드에서 관리
- 많이 사용하는 도구로는 Swagger와 Spring Rest Docs가 있음
문서 자동화 도구 - Swagger
- Swagger는 API call 하여 테스트 하는 기능에 특화
문서 자동화 도구 - Spring Rest Docs
- 테스트 코드에 설정(및 작성) 하여 프로덕션 코드에 영향이 적음
'etc.' 카테고리의 다른 글
[ATDD] 3주차 강의 (0) | 2022.07.28 |
---|---|
[ATDD] 2주차 강의 (0) | 2022.07.14 |
[ATDD] 1주차 강의 (0) | 2022.07.07 |
[오픈소스] 오픈소스 라이센스 정리 (0) | 2021.12.13 |
[Sublime Text] 터미널에서 sublime text 호출하기 (0) | 2021.10.05 |