TIL_220720_강의용 실습 프로젝트 3

창고·2022년 7월 21일
0

들어가기에 앞서
실제 프로젝트 진행했던 코드 내용은 업로드하지 않았습니다

6. Controller 테스트

(1) 테스트 종류

  • 스프링 부트 테스트 @SpringBootTest
    • 스프링 컨테이너, 스프링 부트 환경을 포함하는 테스트는 이것으로 다 작성 가능
    • 통합 테스트 시 적절
    • 애플리케이션 컨텍스트 로드 시간이 걸려 테스트가 다소 무거움
    • @Bootstrapwith + @ExtendWith를 포함
    • JUnit5 쓸 때 @ExtendWith(SpringExtension.class) 쓰지 않기!! (많이 하는 실수)
    • 상세 내용 학습 자료 확인
  • @Test
    • JUnit5 애노테이션
    • 단위 테스트 메소드 지정
  • Auto-configured Test (Sliced Test)
    • 스프링 애플리케이션에서 내가 필요한 일부분(slice)의 자동 설정만 불러오는 방법
    • @WebMvcTest 등...

(2) @WebMvcTest

  • MVC 컨트롤러 레이어를 슬라이스트 테스트할 시 사용
  • MockMvc 빈을 자동 설정하고 테스트에 사용
  • 로드할 컨트롤러 클래스를 지정 가능 (기본 동작은 전체 컨트롤러를 로드함)

(3) Controller 테스트 시작

  • ctrl + shift + t 로 테스트 클래스 제작
  • BaseController (view) 테스트 시작 : view가 정상적으로 출력되는지
  • @SpringBootTest로 테스트해보기
  • Test naming convention (given-when-then)
  • @DisplayName 으로 테스트 시 콘솔에서 표시되는 테스트명 표시 가능
  • import static 기능 으로 status(), content(), containsString() 등 호출
    • ctrl + enterimport 클래스/메소드 부른 뒤 다시 한 번 alt+enter
  • Slice Test : @WebMvcTest로 테스트해보기

    에러 해결
    caused by: org.gradle.internal.uncheckedexception: java.lang.classnotfoundexception: com.example.inline.controller.basecontrollertest at org.gradle.internal.uncheckedexception.throwasuncheckedexception(uncheckedexception.java:68) at org.gradle.internal.uncheckedexception.throwasuncheckedexception(uncheckedexception.java:41)
    https://giters.com/jojoldu/freelec-springboot2-webservice/issues/577

  • BaseErrorController 테스트 : 에러 페이지가 정상적으로 작동되는 지 (고의로 에러 페이지 발생)
  • APIPlaceController 테스트 : GET 기능 정상적으로 작동 되는지
    • ResponseBody 값은 json 이므로 jsonPath 문법 숙지 필요
  • dto 내부 record 타입 PlaceDTO 생성
    • record 타입 레퍼런스 조사 필요
  • APIPlaceController getPlace() 메소드 수정 (List <String> 이 아닌 APIDataResponse 리턴)
  • APIPlaceController 추가 수정 : GET 관련 추가 테스트

부록. Test Driven Development (TDD)

  • 테스트 주도 개발 기법
    • 프로그램의 설계와 구현, 사고의 흐름을 테스트 중심으로 생각하는 개발 방법
    • 개발 순서의 변화
      • as-is : 구현한다 -> 테스트한다
      • to-be : 테스트를 만든다 -> 구현한다
    • 주요 키워드 : 익스트림 프로그래밍, 애자일, 폭포수 모델, Test-First Programming
      -> 나중에 확인해보는걸로...
profile
공부했던 내용들을 모아둔 창고입니다.

0개의 댓글