# 2021-05-19(Wed)

## Facts (사실, 객관)

* 테스트 케이스를 리팩토링하였다.
* 사이드 프로젝트 회의를 두 차례 진행하였다.

## Feelings (느낌, 주관)

* 아내와 시간을 잘 못 보냈었는데, 같이 시간을 보내고 사진도 많이 찍어줄 수 있는 하루였다. 덕분에 다행스럽다.
* 테스트를 능숙하게 잘 짜고 싶다.

## Findings (배운 점)

* Unit Test를 어떻게 해야 잘 작성할 수 있을지 학습했다.
  * 하나의 테스트케이스에 최소한의 기능만 검증하고, 최대한 간결하게 작성한다.
  * 입력값에 대한 결과 값을 검증하는 방식으로 작성하라.
    * 기본적으로는 입력값에 대한 결과값을 확인하는 방식으로 작성하면 소스가 변경되더라도 테스트케이스를 변경할 일이 훨씬 적다.
  * 불안한 부분이 없도록, 개발하는 부분은 최대한 커버하라.
  * Third Party Library의 기능은 믿고, 단위테스트 검증대상에서 제외하라.
    * 넘 중요한 기능이라면 Integration Test나 다른 테스트로 검증하는 것을 고려해보자.
  * Setter는 막 써도 되나?
    * 테스트 코드 작성 시에만 Setter를 사용하도록 하자. 강제할 방법은 없지만.

* 참고
  * [Unit Test (단위 테스트) 도입하기](https://www.popit.kr/unit-test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EC%9E%85%ED%95%98%EA%B8%B0-2%ED%8E%B8/)
  * [Spring 테스트 코드 작성에 대한 나름의 고찰](https://www.popit.kr/spring-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%97%90-%EB%8C%80%ED%95%9C-%EB%82%98%EB%A6%84%EC%9D%98-%EA%B3%A0%EC%B0%B0/)

* `@DisplayName` 이란?
  * 테스트 메서드를 실행할 때 임의의 메세지를 Test reports와 IDE test runner에 출력하기 위해 쓸 수 있는 어노테이션이다.
  * JUnit4에서는 메서드의 이름만 출력 가능했기 때문에, 테스트 맥락 등을 설명하기 위해 메서드 이름이 길어지는 문제가 있었다. 이 문제를 해결하기 위해 JUnit5 부터 추가되었다.
  * 영어 외에도 다양한 언어와 이모티콘까지 모두 출력 가능하다.

* 참고

  * [JUnit 5 User Guide](https://junit.org/junit5/docs/current/user-guide/#writing-tests-display-names)
  * [\[Junit5\] Junit4에서 Junit5으로](https://sabarada.tistory.com/79)

* "메소드를 처음 본 사람이 이 테스트가 무엇을 테스트하는지 3초 안에 알아차리도록 하려면 어떻게 해야 좋을까요?"

  라는 종립님의 질문에 답하다가 D-C-I 패턴으로 테스트코드를 작성하는 방법을 학습했다.

  * 참고
    * <https://johngrib.github.io/wiki/junit5-nested/>

## **Affimation (자기 선언)**

* 테스트 케이스를 모두 리팩토링하고 제출한다.
* 솔직히 묻고 답한다.
