- 티스토리에있던 TIL을 복사해왔다.
- 티스토리에서 작성했던 내용을 검색하면, 이 벨로그에 복사한다. ( 나중 검색, 누적학습을 위해)
Done
- 미션2 진행 중 -> 수정 중
- 다른사람 코드에 대한 피드백 & 코드 읽고 공부하기
Learned
1. assertThat vs assertEquals
(1-1) 왜공부?
- Junit 테스트를 할 때 assertThat을 쓴 코드와 assertEquals를 쓴 코드를 둘 다 접하게 되면서 기능을 비슷한 것 같은데 왜 다를까 해서 공부하게 되었다.
(1-2) 결론 == asserThat을 쓰기
- https://objectpartners.com/2013/09/18/the-benefits-of-using-assertthat-over-other-assert-methods-in-unit-tests/
- assertThat의 코드가 더 직관적으로 읽기 쉽다.
- assertEquals(expected, actual);
- assertThat(actual).isEqualTo(expected);
- “Assert that the actual value is equal to the expected value.”라는 문장으로 직관적으로 알 수 있다
- Type 안정성
- 타입이 다른 경우 assertEquals는 컴파일까지는 한다.. 하지만 assertThat은 아예 컴파일을 하지 않는다.
- assertEquals("abc", 123); //compiles, but fails
- 그 외에도 더 나는 에러메시지 제공 등의 다른 장점이 많지만 일단 여기서 만족
- 사용방법
- (Gradle 경우) dependency에 `testImplementation 'org.assertj:assertj-core:3.11.1' 추가
- test클래스에
import static org.assertj.core.api.Assertions.assertThat;
import
2. @Before 어노테이션
- 이에 대해서는 백기선 자바스터디 4주차(과제0. 0.6.1 어노테이션 1 : @BeforeEach 와@BeforeAll 의 차이.) 에서 코드 작성하며 확인했다. 작성한 코드를 보고 싶으면 이곳으로.
(2-1) 결론 : @BeforeAll, @AfterAll는 한 테스트 클래스 안에 tests 전체에 한 번 적용, @BeforeEach, @AfterEach는 한 테스트 클래스 안 tests 각각에 적용 (tests 수가 10개면 10번 적용), static 메서드만 붙임
기타
(1) JAVA에서 메서드에 옵서널 파라미터를 추가하는 것은 좋지 않다
- 왜 하고 싶었나? 메서드를 실행할 때 매개변수가 있을 때 / 없을 때로 나눠서 사용하고 싶어 옵셔널을 알아봤지만 좋지 않다는 의견을 봤다.
- 매개변수 값을 넣어주고(매개변수가 String name 이라고 할 때) if(String.isEmpty(name)) { 예외처리 ) 할 수 있지만 이것은 내가 원하는 것은 아니다. 하지만 이렇게 매개변수가 있어야 하는 메소드에 대해서 매개변수가 없을 때 예외 처리한다는 것을 배울 수 있었다.
(2) Parameerized Tests - enum 활용
- 이에 대해서 백기서님 자바 스터디 4주차(0.6.5 어노테이션5 Data Driven Tests - @ParameterizedTest)여기서 학습했다.
- Parameerized Tests는 인자를 전달하며 테스트를 할 수 있다. 이를 전달하는 방법에는 여러가지가 있는데
Enum
도 인자로 전달 가능하다.
- @EnumSource(enum 클래스)
(3) assertions를 여러 개 사용할 때는 assertAll을 사용
(4) 개행 추가
- 파일 끝엔 개행이 필수다

- 인텔리제이는 Settings->Editor->General->Other->Ensure line feed at file end on save. 에 체크박스를 해준다
- 이 설정은 안해 주면 마지막 } 뒤마다 엔터 쳐 줘야함

- 이런식으로 코드는 22에서 끝낫는데 줄은 23까지 살아있다
- 배경은 옛날에.. line에 대한 정의 때문에. 소스코드를 line by line으로 읽어서 개행이 없으면, 한 줄이 끝나지 않은 것으로 인식해서 정상적으로 동작하지 않는다.. 라고 적당히 이해했다.
- 출처 https://minz.dev/19
(5) 학습했지만 잊어버려 삽질 했다. 이 개념 다시 기억하자
예외처리

Good
- 설맞이 부모님께 요리를 해드렸다. 맛있게 먹는 가족들의 모습에 기분이 좋았다.
Bad
- (좋은 것인지 나쁜 것인지 모르겠지만) 코드스쿼드 줌을 키지 않고 하니 확실히 압박감에서 벗어나서 여유롭게 코드를 작성했다. 효율은 안나서 나쁘지만 재미를 붙이기엔 좋았다.
Feeling
- 설이라 조금 여유있게 하게 되었는데 내일은 마음을 잡고 다시 빡세게 해야 겠다.
TODO