3주차 인수 테스트와 인증
0. [이론] 배운 사항들
통합 테스트
넓은 의미로는 E2E도 통합테스트
좁은 의미는
데이터 베이스 테스트
외부 라이브러리 테스트
단위 테스트로만 충분한가?
특정 단위에 대한 검증이므로 단위 테스트에만 의존하면 단위들이 유기적 동작하는지 확인 어렵다.
E2E 테스트를 통해 보완가능하지만 단위들이 외부와 연동 되는지 확인 필요
DB, 외부 서비스 연결 확인 필요
관리 의존성 VS 비관리 의존성
관리 의존성
실제 대상 테스트 추천
비관리 의존성
대체 테스트 추천
의존성 테스트 방법
실제 외부 의존성
Stub 대체
Fake 대체
인수테스트내 인증?
어떤 인증?
인증 정보?
인증 관련 로직?
1. [실습] 구현 단계들
1단계 - 내 정보 조회 기능 구현
2단계 - 깃헙 로그인 인수 테스트
3단계 - 즐겨찾기 기능 구현
요구사항으로부터
Inside Out(도메인부터 시작, 실제 의존객체 이용) 활용
Outside In(컨트롤러부터 시작 , Test Double 활용) 활용
외부 모듈에 의존이 있을 때,
stub, fake를 이용해서 TDD를 진행할 수 있다. (이 부분에서 대부분 TDD에 어려움을 겪음)
2. [실습] 배운 사항
A. RestAssured 꿀팁
RestAssured에서 사용하는 RequestSpecification.auth()
oauth2(accessToken)
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단계 - 내 정보 조회 기능 구현
회원 생성/로그인 요청/토큰 발급/토큰을 이용한 내 정보 조회 요청
주요 피드백 사항
오류 케이스에 대한 테스트도 추가되면 좋을 것 같아요.
ex) 잘못된 토큰으로 조회 요청
2단계 - 깃헙 로그인 인수 테스트
깃헙 fake controller 사용하기
주요 피드백 사항
커스텀 오류 메시지 구현
3단계 - 즐겨찾기 기능 구현
즐겨찾기 구현 (CRUD)
주요 피드백 사항
deleteLine -> deleteFavorite
deleteFavorite에 대해서 해당 유저의 권한 체크
인수테스트 then 에러 수정
오류를 상수 메시지로 바꾸는 부분 진행
비정상 경로를 즐겨찾기로 등록하는 경우에 대한 검증
Last updated