본문으로 바로가기

[ATDD] 4주차 강의

category etc. 2022. 8. 4. 21:56

단위테스트 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