-
Notifications
You must be signed in to change notification settings - Fork 24
2021 07 25 회의록
Jinhong edited this page Aug 16, 2021
·
1 revision
- 마크 - 프로필 수정, 유저 검색
- 코다 - 게시물 좋아요 추가/삭제
- 다니 - 게시물 수정/삭제, 깃헙 통계 API 조회
- 손너잘
- 케빈
test
ㄴ unit
ㄴ post
ㄴ domain
ㄴ service
ㄴ controller
ㄴ user
ㄴ comment
ㄴ tag
ㄴ ...
ㄴ integration
ㄴ post
ㄴ user
ㄴ ...
ㄴ acceptance
ㄴ post
ㄴ user
ㄴ ...
ㄴ config
- 웹과 관련없는 도메인 비즈니스 로직에 대한 테스트
- 실패하는 케이스 작성 (성공 / 실패)
- equals 및 hashCode 재정의 주의
- Lazy loading의 경우 getter 활용해야함
- 도메인 순서
- 필드 - 생성자 - 로직 - (getter, setter, equals & hashCode)
- 당연히 통과하는 테스트를 작성하지 않기
- 특히, JPA 관련 테스트의 경우 영속성 컨텍스트를 고려하여 테스트를 작성하자.
- 도메인별 필요한 모든 테스트 작성
- Acceptance Test
- Integration Test : Service + JPA / Service + S3, Service + Github API
- Slice Test : Service / Controller
- Unit Test: Domain Unit / JPA Test (기본 CRUD + 사용자 정의 메소드 + unique 등의 제약조건)
- Test Fixture
- 팩토리 활용하여 공통 픽스쳐 사용 - Lazy 하게 생성
-
User
,Post
,File
- 패키지 분리.
- 팩토리 설계.
- 각 도메인별로 시나리오, 테스트 케이스 명세를 정하기.
- 다른 도메인 테스트 코드 리팩토링 및 작성해주기.
-
@NoArgsConstructor
(AccessLevel=Protected)와@Builder
(생성자 위)만 사용 -
@toString
,@Getter
절대 금지
Post
-
infrastructure
- GithubRepositoryApiRequester.java
- 깃허브 레포지토리를 요청하면, 정상적인 반환값을 얻는다.
- 잘못된 토큰으로 깃허브 레포지토리 요청을 하면, badCredential 예외가 발생한다.
- 토큰 없이 깃허브 레포지토리 요청을 하면, badCredential 예외가 발생한다.
- GihubRepositoryExtractor.java
- 깃허브 레포지토리를 요청하면, 레포지토리를 반환한다.
- 토큰 없이 깃허브 레포지토리를 요청하면, 예외를 반환한다.
- S3Storage.java
- 이미지 저장을 요청하면 url을 반환한다.
- 이미지 없이 저장을 요청하면 빈 배열을 요청한다.
- GithubRepositoryApiRequester.java
-
domain
- content
- like
- Post.java
- Posts.java
- PostTag.java
- PostRepository.java
-
application
- PostDtoAssembler
- PostService
- write
- 사용자는 게시물을 등록할 수 있다.
- 존재하지 않는 사용자는 게시물을 등록할 수 없다.
- 컨텐츠의 길이가 500보다 크면 게시물을 등록할 수 없다.
- addComment
- 게시물에 댓글을 정상 등록한다.
- 게시물에 빈 댓글을 등록할 수 없다.
- 존재하지 않는 사용자는 댓글을 등록할 수 없다.
- 존재하지 않는 게시물에는 댓글을 등록할 수 없다.
- showRepositories
- 사용자는 Repository 목록을 가져올 수 있다.
- AccessToken이 잘못되었다면, Repository 목록을 가져올 수 없다.
- UserName이 잘못되었다면, Repository 목록을 가져올 수 없다.
- readHomeFeed
- 메인 홈 피드를 가져온다.
- readMyFeed
- 나의 홈 피드를 가져온다.
- 잘못된 유저는 나의 홈 피드를 가져오지 못한다.
- 게스트 유저는 나의 홈 피드를 가져오지 못한다.
- readUserFeed
- 다른 유저의 홈 피드를 가져온다.
- 게스트 유저는 다른 유저의 홈 피드를 가져온다
- 잘못된 유저는 다른 유저의 홈 피드를 가져온다
- write
-
presentation
- PostController.java
- 인증된 사용자의 프로필을 가져온다.
- 다른 사용자의 프로필을 가져온다. - 로그인
- 다른 사용자의 프로필을 가져온다. - 비 로그인
- 팔로잉을 한다. - 로그인
- 언팔로잉일 한다. - 로그인
- 팔로잉을 한다. - 비 로그인
- 언팔로잉일 한다. - 비 로그인
- PostController.java
Integration
- PostServiceIntegration
- 게시물에 댓글을 정상 등록한다.
- 게시물에 빈 댓글은 등록할 수 없다.
- 사용자는 게시물을 등록할 수 있다.
- 사용자는 Repository 목록을 가져올 수 있다.
- 토큰이 유효하지 않은 경우 예외가 발생한다. - 500 예외
- 사용자가 유효하지 않은 경우 예외가 발생한다. - 500 예외
- 저장된 게시물 중 3, 4번째 글을 최신날짜순으로 가져온다.
- 내 피드 게시물들만 조회한다.
- 로그인 사용자가 다른 사용자의 피드 게시물을 조회한다.
- 비로그인 사용자가 다른 사용자의 피드 게시물을 조회한다.
Acceptance
- PostAcceptance
- [ ]
- Github 로그인 요청을 하면 Github 인증 URL을 반환한다.
- Github 로그인 인증 후 토큰을 발행하여 반환한다.
참고
- AppUser나 invalid 한 인자가 없으므로 이 두가지만 테스트하도록 유지
- invalid 한 code가 올 수 있으나, 해당 예외 처리는 깃헙에서 하므로 따로 검증하지 않음
- 처음 생성된 JWT 토큰과 OAuth Access Token을 맵에 성공적으로 저장하고 불러온다.
- 이미 있는 JWT 토큰에 대해서 새로운 OAuth Access Token을 추가해도 성공적으로 덮어씌워진다.
고민할 부분
- JWT 토큰을 덮어 씌우는 경우는? → JWT 토큰은 유효한데 github단에서 리프레시 된 경우
- DAO에 토큰 제거 로직 필요 → 보류
- Github 로그인 URL을 반환한다. → 지나치게 단순해서 필요한 테스트인지 모르겠으나 유지
- 회원가입(첫 로그인)시 Github Profile을 가져와서 DB에 insert한다.
- 로그인(첫 로그인이 아닌경우)시 Github Profile을 가져와서 DB에 저장된 기존 정보를 update한다. → update 된 여부를 확인하기는 어렵고 userRepository.save() 를 호출하지 않는 것으로 확인
- JWT 토큰을 통해 AccessTokenDB에서 LoginUser에 대한 정보를 가져온다. → Mocking 한 것을 테스트 하는 듯한 느낌이 있지만, 슬라이스 테스트이므로 단순 dto 매핑에 대한 테스트를 한다고 생각함
- AccessTokenDB에 저장되어 있지 않은 JWT 토큰이라면 예외가 발생한다.
- 빈 JWT 토큰이면 GuestUser를 반환한다.
변경 사항
- verify를 더 큰 범위로 지정한 것을 추가
- 유효한 토큰이면
LoginUser
를 반환한다. - 유효하지 않은 토큰이면 예외가 발생한다.
- AccessToken DB에 저장되어 있지 않은 토큰이라면 예외가 발생한다.
- 요청 헤더에 authorization을 추가해주지 않으면
GuestUser
가 반환된다.
- 현재
JwtTokenProvider
,OAuthAccessTokenDao
,OAuthService
를 의존하고 있음 - 위 3개를 모킹할 수 있으나, 그러면 테스트하는 로직이 없어서 애매함
- 현재 있는 2, 3 의 예외케이스도
OAuthService
에서 발생시키는 예외임 -
OAuthService
의 슬라이스 테스트와 매우 중복됨
변경 사항
- 현재 resolver 단위 테스트가 통합 테스트에 가까우므로 단위 테스트 → 통합 테스트로 이전하고 해당하는 예외 케이스에 대한 테스트를 작성하도록 함
- 불필요한 @InjectMock 제거
- CORS 프리플라이트 요청이면 true를 반환한다.
- 유효한 토큰의 요청이면
HttpServletRequest
에 토큰 정보를 저장하고 true를 반환한다. - 유효하지 않은 토큰의 요청이면 예외를 던진다.
- 유효기간이 지난 토큰의 경우 예외가 발생한다.
변경 사항
- 리졸버와 마찬가지로 통합 테스트로의 의미가 더 강하므로 Unit → Integeration 패키지로 이전함
- 유효한 토큰을 가진 회원이면 true를 반환한다. -
LoginUser
인 경우 - 토큰이 아예 없으면 true를 반환한다. -
GuestUser
인 경우 - 토큰이 존재하지만 유효하지 않으면
InvalidTokenException
을 던진다.
변경 사항
- 리졸버와 마찬가지로 통합 테스트로의 의미가 더 강하므로 Unit → Integeration 패키지로 이전함
- Github 로그인 URL을 반환한다.
- 회원가입(첫 로그인)시 Github Profile을 가져와서 DB에 insert한다.
- 로그인(첫 로그인이 아닌경우)시 Github Profile을 가져와서 DB에 저장된 기존 정보를 update한다.
- JWT 토큰을 통해 AccessTokenDB에서 LoginUser에 대한 정보를 가져온다.
- AccessTokenDB에 저장되어 있지 않은 JWT 토큰이라면 예외가 발생한다.
- authentication이 Null 이라면 GuestUser를 반환한다.
변경 사항
- OAuthProfileResponse 에 Builder 추가 및 setter삭제
- 테스트 케이스 추가
- 로그인 - Github OAuth 로그인 URL을 요청한다.
- 로그인 - Github 인증후 리다이렉션을 통해 요청이 오면 토큰을 생성하여 반환한다.
- 재 로그인 - 첫 로그인 이후로 동일한 유저로 로그인하면 정보 업데이트 후 토큰을 생성하여 반환한다.
변경 사항
- OAuthProfileResponse 빌더로 변경
- 테스트 케이스 추가
- code가 invalid 한 경우를 추가하려고 했으나, OAuthClient가 모킹되어 있으므로 불가
질문
- OAuthClient를 모킹한 이유
-
마크
- 단순히 테스트 케이스를 추가하고 몇개 수정한 정도를 했다.
- Post, User쪽에 너무 많은 것을 맡고 있는것 같다는 생각이 들었다.
-
손너잘
- TF 팀/리팩토링 팀 따로 있었으면 좋겠다.
- 기능을 빠르게 구현하는 팀 + 리팩토링 하는 팀
-
케빈
- 테스트 할 것이 별로 없었다. 테스트 몇개 추가 정도.
- 테스트마다 도커가 돌아가야하는 것이 시간이 오래 걸렸다.
- TF팀/리팩토링팀 투트랙에 대한 의견 - 동의함!
-
다니
- 몇개 추가하고, 픽스쳐 반영, 변수명 통일 등등의 일 진행
- TF팀/리팩토링팀 투트랙에 대한 의견 - 동의하지만 리팩토링 개념 잘 잡고 가야할 듯. sync 맞추기.
-
코다
- 테스트 케이스를 조금 추가한 정도
- TF팀/리팩토링팀 투트랙에 대한 의견 - 동의하나 리팩토링 팀이 감을 못잡을수도 있으니 개념을 잘 잡고 가면 좋을듯.
Copyright © 2021 WoowaCourse Project Team PickGit