티스토리 뷰
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.”라는 문장으로 직관적으로 알 수 있다
- assertEquals(expected, actual);
- 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
- assertThat의 코드가 더 직관적으로 읽기 쉽다.
2. @Before 어노테이션
- 이에 대해서는 백기선 자바스터디 4주차(과제0. 0.6.1 어노테이션 1 : @BeforeEach 와@BeforeAll 의 차이.) 에서 코드 작성하며 확인했다. 작성한 코드를 보고 싶으면 이곳으로.
(2-1) 결론 : @BeforeAll, @AfterAll는 한 테스트 클래스 안에 tests 전체에 한 번 적용, @BeforeEach, @AfterEach는 한 테스트 클래스 안 tests 각각에 적용 (tests 수가 10개면 10번 적용), static 메서드만 붙임
- 출처 https://stackoverflow.com/questions/20295578/difference-between-before-beforeclass-beforeeach-and-beforeall
- @Before 각각의 test 전에 실행된다
- @BeforeClass 전체 test 전에 오직 한 번만 실행
- 한 test class 안에서 10개의 test가 있을 때 @Before은 10번 실행, @BeforClass는 한 번만 실행
- 여러 테스트가 똑같은 실행환경 필요할 때 사용한다. (static initializer 처럼)
- Junit5에서 @BeforeEach는 @Before과 같고 @BeforeClass는 @BefforeAll과 같다.
- @Afterall @AfterEach 도 같은 구분 기준을 사용한다
기타
(1) JAVA에서 메서드에 옵서널 파라미터를 추가하는 것은 좋지 않다
- 왜 하고 싶었나? 메서드를 실행할 때 매개변수가 있을 때 / 없을 때로 나눠서 사용하고 싶어 옵셔널을 알아봤지만 좋지 않다는 의견을 봤다.
- 매개변수 값을 넣어주고(매개변수가 String name 이라고 할 때) if(String.isEmpty(name)) { 예외처리 ) 할 수 있지만 이것은 내가 원하는 것은 아니다. 하지만 이렇게 매개변수가 있어야 하는 메소드에 대해서 매개변수가 없을 때 예외 처리한다는 것을 배울 수 있었다.
- http://dveamer.github.io/backend/JavaValidation.html 원 출처는 Effective Java 책이다.
(2) Parameerized Tests - enum 활용
- 이에 대해서 백기서님 자바 스터디 4주차(0.6.5 어노테이션5 Data Driven Tests - @ParameterizedTest)여기서 학습했다.
- Parameerized Tests는 인자를 전달하며 테스트를 할 수 있다. 이를 전달하는 방법에는 여러가지가 있는데
Enum
도 인자로 전달 가능하다. - @EnumSource(enum 클래스)
- test 메소드 실행 당 하나의 argument를 전달
- vlaue = enum클래스, names = {test하고 싶은 enum객체, 쉼표로 구분 } : 원하는 객체만 테스트할 수 있다.
- https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests
(3) assertions를 여러 개 사용할 때는 assertAll을 사용
- 이에 대해서 백기서님 자바 스터디 4주차(0.6.5 어노테이션5 Data Driven Tests - @ParameterizedTest)여기서 코드 작성하면서 학습했다. (0.3. 여러 개의 Assertions, assertAll)
- 출처 https://stackoverflow.com/questions/40796756/assertall-vs-multiple-assertions-in-junit5
- assertAll은 assertions을 다 체크한다. fail하는 assertions가 있더라도 전체를 체크하기 때문에 어디서 fail 했는지 알 수 있다.
- assertions을 여러 개 사용이 하나가 fail이면 더이상 체크를 멈추고 진행하지 않는다.
(4) 개행 추가
- 파일 끝엔 개행이 필수다
- 인텔리제이는 Settings->Editor->General->Other->Ensure line feed at file end on save. 에 체크박스를 해준다
- 이 설정은 안해 주면 마지막 } 뒤마다 엔터 쳐 줘야함
- 이런식으로 코드는 22에서 끝낫는데 줄은 23까지 살아있다
- 배경은 옛날에.. line에 대한 정의 때문에. 소스코드를 line by line으로 읽어서 개행이 없으면, 한 줄이 끝나지 않은 것으로 인식해서 정상적으로 동작하지 않는다.. 라고 적당히 이해했다.
- 출처 https://minz.dev/19
(5) 학습했지만 잊어버려 삽질 했다. 이 개념 다시 기억하자
예외처리
- 그림출처 : https://kimhyun2017.tistory.com/58
- error와 exception 의 차이 (출처 : 자바의 정석) https://bong-f.tistory.com/155
- error : 프로그램 코드에 의해 수습될 수 없는 심각한 오류 ( 메모리 부족 등)
- exception 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
- try-catch 문으로 예외를 처리. 에러는 처리 할 수 없어. (complie 에러 처리 불가)
- try문에서 예외 발생시, 해당하는 예외가 있는 catch문으로 간다
Good
- 설맞이 부모님께 요리를 해드렸다. 맛있게 먹는 가족들의 모습에 기분이 좋았다.
Bad
- (좋은 것인지 나쁜 것인지 모르겠지만) 코드스쿼드 줌을 키지 않고 하니 확실히 압박감에서 벗어나서 여유롭게 코드를 작성했다. 효율은 안나서 나쁘지만 재미를 붙이기엔 좋았다.
Feeling
- 설이라 조금 여유있게 하게 되었는데 내일은 마음을 잡고 다시 빡세게 해야 겠다.
TODO
- private TIL에 작성 https://bong-f.tistory.com/178
'기타 > TIL' 카테고리의 다른 글
210214 일 TIL (0) | 2021.02.14 |
---|---|
210213 토 TIL (0) | 2021.02.13 |
210210 수 TIL (0) | 2021.02.10 |
210209 화 TIL (0) | 2021.02.09 |
210208 월 TIL (0) | 2021.02.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스lev1
- SQL코딩테스트
- 백준
- Queue
- array
- FLASK
- JdbcTemplate
- spring-boot-qna
- arraylist
- 프로그래머스lev3
- 동빈북
- 순열조합
- 최단경로
- Gitignore
- Stack
- 예외
- Stream
- thread
- 프로그래멋lev2
- 힙
- 그래프이론
- 우선순위큐
- 프로그래머스lev2
- Sort
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함