210212 금 TIL

bongf·2021년 7월 29일
0

지난TIL

목록 보기
4/4
  • 티스토리에있던 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 메서드만 붙임

  • 출처 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)) { 예외처리 ) 할 수 있지만 이것은 내가 원하는 것은 아니다. 하지만 이렇게 매개변수가 있어야 하는 메소드에 대해서 매개변수가 없을 때 예외 처리한다는 것을 배울 수 있었다.

(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) 학습했지만 잊어버려 삽질 했다. 이 개념 다시 기억하자

예외처리

  • 그림출처 : https://kimhyun2017.tistory.com/58
  • error와 exception 의 차이 (출처 : 자바의 정석) https://bong-f.tistory.com/155
    • error : 프로그램 코드에 의해 수습될 수 없는 심각한 오류 ( 메모리 부족 등)
    • exception 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
    • try-catch 문으로 예외를 처리. 에러는 처리 할 수 없어. (complie 에러 처리 불가)
      • try문에서 예외 발생시, 해당하는 예외가 있는 catch문으로 간다

Good

  • 설맞이 부모님께 요리를 해드렸다. 맛있게 먹는 가족들의 모습에 기분이 좋았다.

Bad

  • (좋은 것인지 나쁜 것인지 모르겠지만) 코드스쿼드 줌을 키지 않고 하니 확실히 압박감에서 벗어나서 여유롭게 코드를 작성했다. 효율은 안나서 나쁘지만 재미를 붙이기엔 좋았다.

Feeling

  • 설이라 조금 여유있게 하게 되었는데 내일은 마음을 잡고 다시 빡세게 해야 겠다.

TODO

profile
spring, java학습

0개의 댓글