221205 - 요청메서드, 예외, 테스트

Cornchip·2022년 12월 5일
0

Today-I-Learned

목록 보기
6/28

목차
1. PATCH와 PUT
2. 예외처리
3. 오늘날 테스트



1. PATCH와 PUT

  • PUT은 모든 정보를 수정하겠다는 의미
  • PATCH는 해당 리소스 중에 특정 데이터만 수정해 주겠다는 의미


2. 예외처리

1) @ExceptionHandler

  • @Controller, @RestController 가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다.
  • @ExceptionHandler(인자로받을예외클래스.class)의 형태로 등록한다. (여러 예외 클래스 등록 가능)
  • return 타입은 자유롭다.
  • 파라미터 또한 자유롭다.
  • 해당 컨트롤러 내에서만 동작한다.

2) @ControllerAdvice

  • @RestControllerAdvice와 기능은 같다.
  • 해당 Controller내에서만 사용되는 @ExceptionHandler와는 달리 전역에서 발생할 수 있는 예외에 대해서 처리해준다.


3. 오늘날 테스트

1) 과거

  1. 사람이 테스트를 직접 진행하던 시절, mybatis에서 테스트하기가 까다로웠다.
  2. JPA가 등장하게 되고, 쿼리가 아닌 자바 코드에 쿼리 로직이 많이 담기게 되었다.

    유지보수성의 극적 향상(쿼리로는 다형성이나 디자인패턴 전략 등을 하기 어렵거나 불가능)
    자바코드에 담긴 로직은 쿼리에 담긴 로직에 비해 테스트하기 상대적으로 편리함.


2) 테스트를 잘 하기 위한 기반

  • 클래스나 메서드가 SRP를 잘 지키고, 크기가 적절히 작아야함.
    • 그래야 테스트를 집중력 있게 만들 수 있고 한 메서드에 너무 많은 테스트를 수행하지 않아도 됨
    • 테스트를 하는 것의 장점(테스트를 하면 자연스럽게 역할이 확인되며 리팩토링실력의 증가)
  • 적절한 Mocking을 통한 격리성 확보
    • 단위테스트가 만능은 아니지만, 위의 SRP처럼 해당 메서드의 역할을 정확히 테스트하려면 주변 조건을 적절히 통제해야 한다.
  • 당연히 잘 돌겠지라는 생각을 접고, 꼼꼼히 테스트 할것
    && 너무 과도하게 많은 테스트와 코드량이 생기지 않도록 적절히 끊기
    • 테스트코드도 코드 리뷰 시에 적절한 테스트를 하는지 확인 필요
  • 테스트 코드 개선을 위한 노력
    • 테스트코드도 리팩토링 필요
    • 테스트코드의 기법들도 지속적인 고민 필요(통합테스트 등)

3) JUnit5

  • java에서 유닛테스트를 하기 위한 framework

  1. assertEquals(): 예상값과 실제값, 두 파라미터를 받아서 같은지 비교해주는 JUnit의 검증방법.
  2. @SpringBootTest: Test를 할 때에도 Bean을 띄워서 테스트를 진행하겠다. (그렇지 않으면 모든 의존 객체들을 구현해야 한다.)

    @Autowired사용가능, 이를 통해 의존객체주입

  3. @ExtendWith(MockitoExtension.class): 모든 Java Bean을 띄워서 테스트를 하는 것은 비효율적이기 때문에 테스트 하려고 하는 부분만 진행하겠다.

    @InjectMocks사용가능, 이를 통해 (Mock)의존객체주입
    @Mock : 의존객체주입
    given(): Mock들의 행동을 정의한다.

profile
cornchip

0개의 댓글