3주차 인수 테스트와 인증

0. [이론] 배운 사항들

  • 통합 테스트

    • 넓은 의미로는 E2E도 통합테스트

    • 좁은 의미는

      • 데이터 베이스 테스트

      • 외부 라이브러리 테스트

  • 단위 테스트로만 충분한가?

    • 특정 단위에 대한 검증이므로 단위 테스트에만 의존하면 단위들이 유기적 동작하는지 확인 어렵다.

    • E2E 테스트를 통해 보완가능하지만 단위들이 외부와 연동 되는지 확인 필요

    • DB, 외부 서비스 연결 확인 필요

  • 관리 의존성 VS 비관리 의존성

    • 관리 의존성

      • 실제 대상 테스트 추천

    • 비관리 의존성

      • 대체 테스트 추천

    • 의존성 테스트 방법

      • 실제 외부 의존성

      • Stub 대체

      • Fake 대체

  • 인수테스트내 인증?

    • 어떤 인증?

    • 인증 정보?

    • 인증 관련 로직?

1. [실습] 구현 단계들

1단계 - 내 정보 조회 기능 구현

2단계 - 깃헙 로그인 인수 테스트

3단계 - 즐겨찾기 기능 구현

요구사항으로부터

  1. Inside Out(도메인부터 시작, 실제 의존객체 이용) 활용

  2. Outside In(컨트롤러부터 시작 , Test Double 활용) 활용

외부 모듈에 의존이 있을 때,

  1. stub, fake를 이용해서 TDD를 진행할 수 있다. (이 부분에서 대부분 TDD에 어려움을 겪음)

2. [실습] 배운 사항

A. RestAssured 꿀팁

B. Auth 토큰 오류 처리

  • Custom Error 들 중에 세부적으로 나눠줘야 하는 케이스들

    • unauthorized Exception vs Forbidden Exception 나누기

    • 토큰 expired 랑 토큰 unauthorized 구분하기

    • AuthenticationPrincipal에 Null 값

C. Auth 패키지 위치

  • DIP에 대한 이해가 없어서 다른 도메인이 auth 모듈에 의존성을 가지는것에 대해서 의문을 가졌다.

    • Auth 에러는 auth

    • 도메인 Exception은 도메인 별로 구현

    • 도메인이 auth에 의존하지 않게 UserDetailService 와 OAuth2UserService를 DIP로 이용

D. 메시지 상수화

3. [실습] 구현 사항들

  • 1단계 - 내 정보 조회 기능 구현

  • 3단계 - 즐겨찾기 기능 구현

    • 즐겨찾기 구현 (CRUD)

    • 주요 피드백 사항

      • deleteLine -> deleteFavorite

      • deleteFavorite에 대해서 해당 유저의 권한 체크

      • 인수테스트 then 에러 수정

      • 오류를 상수 메시지로 바꾸는 부분 진행

      • 비정상 경로를 즐겨찾기로 등록하는 경우에 대한 검증

Last updated