Skip to content

tech diary 2022.07.06

Philz edited this page Jul 21, 2022 · 1 revision

final, final, final !!!!

Test

테스트 픽스쳐 생성

  • 인수테스트의 부모인 AcceptanceTest 에 생성

RestAssured의 body()

  • json path를 string타입으로 넣어서 field 조회 가능
    • list 객체인 경우 discussions.0으로 개별 데이터 조회
    • discussions.id → id field를 list로 묶어서 검증 가능

MockMvc json 객체 검증

[MockMvc를 이용한 REST API의 Json Response 검증 (tistory.com)](https://ykh6242.tistory.com/entry/MockMvc%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-REST-API%EC%9D%98-Json-Response-%EA%B2%80%EC%A6%9D)

Mock Test에서 JPA BaseEntity data가 누락되는 이슈

  • Reflect로 해결?
    • test에 의한 src/main package 내용 변경을 하지 않기 위한 방안
    • Reflect가 우리 생각보다 고비용일지도,,? (굳이..라는 반응)
  • Response를 Entity 통하지 말고, Dto 생성자 열어서 해결? ← 채택
    • Test를 위한 변경이긴 하지만, production이라고 보기도 애매하고 그냥 Dto일뿐인데 그걸 그렇게까지 제한해야 하나,, (네오생각)
    • 이런 상황에서는 최대한 간단한 해결법을 생각할 것 같다

Response Body 숫자 검증

  • Long을 보냈다고 해서 검증값을 Long type으로 주는 것이 아님
  • java Long type으로 보냈지만, json 객체로 pasing된 이후에는 그저 숫자일 뿐
  • 1L → 1로 수정 후 test 통과

Repository Test 격리

  • 직접 BeforeEach method 작성?
  • @Transactional
    • id값 문제, 테스트 격리 해결 X (repository test의 각 case에 대해 “전”처리 필요)
  • truncate.sql작성 + @Sql

예외 인수테스트 vs Controller 테스트

  • 우리가 의도한 ui 동작을 통해 들어오는 요청임에도 발생하는 예외 → 인수테스트
    • ex) 로그인 실패, Form validation 통과했음에도 발생할 수 있는 예외 등
  • 그 외 예외 → ~ Controller test
    • ex) uri 조작 또는 postman 요청 등.. 억지스러운 상황들

Prod

LocalDateTime → TimeStamp

생성자 vs 정적 factory

  • 생성자에서는 field에 값 할당하는 로직”만”?
  • LocalDateTime → Timestamp 변환 정도는 생성자에서 해줘도 괜찮지 않나..?
  • → static factory method에서 entity를 받아 변환하도록 작성

Annotation Processes

  • Lombok Annotation 안나온다고 당황하지 말고 Preference에서 설정해주자

      ~가 문제가 아니고 Test Package에 있었다~
    

Get / Find Naming 기준 (채택XX)

이런 기준도 있다~ 정도.. 그러나 SpringDataJpa 사용을 위해 method 이름 통일

  • 값이 하나 이상 존재할 것이라고 상정되는 경우 (ex id값으로 조회) get
  • 값이 존재할 지 말지 모르겠고 일단 찾아보는 경우 (ex 목록조회) find

목록 조회 - JPQL

  • findAll query
public List<Discussion> findAll() {
    return entityManager.createQuery("select d from Discussion d", Discussion.class).getResultList();
}

Method 정렬 기준

  • public, private 섞어서 (호출 순서 따라서)
  • public 우선, private은 밑으로 (채택)
    • 1기준을 접근제한자로
    • 2기준 호출순서

Dto에 @Builder 추가

  • Lombok을 통해 Builder 패턴 적용

적용된 Builder 패턴 사용하기

{클래스명}.builder()
    .{초기화  필드명}({})
    .build();

CustomException 분리

  • Exception class에서 status code를 지정해준다?
    • 포키 소신발언: web에 필요한 정보에 대한 관심사는 controller에서 끊기면 좋겠당,, HttpStatus는 controller 계층에서 정해주면 좋겠당~!
  • 일단 보류, 지금은 작은 단위의 Exception만 custom해두고 추후에 필요할 때 다시 고민하자~!!

Git

upstream/develop 동기화를 rebase로?

  • feature branch에서 rebase를 통해서 분기 시점을 옮긴다
    • 단점: 특정 commit에서 conflict이 발생하는 경우 그 이후 모든 commit에 대해 개별적으로 conflict을 해결해야 함
    • 장점: fast-forward 유지로 예쁜 commit log

Commit message template 적용

[Git에 commit Template 추가 (set up Git Commit Template) (achicgo.blogspot.com)](http://achicgo.blogspot.com/2020/08/git-commit-template-set-up-git-commit.html)

.gitmessage가 있는 directory에서 git bash 실행 → template 설정 명령어를 실행해 줍니다.

$ cp ./.gitmessage ~/.gitmessage

$ git config --global commit.template ~/.gitmessage


Memo

  • 우리 Issue 왜 자꾸 안닫힘?ㅠ
Clone this wiki locally