PR 링크
- step1 - https://github.com/next-step/java-lotto-pro/pull/357
- step2 - https://github.com/next-step/java-lotto-pro/pull/421
- step3 - https://github.com/next-step/java-lotto-pro/pull/507
- step4 - https://github.com/next-step/java-lotto-pro/pull/534
- step5 - https://github.com/next-step/java-lotto-pro/pull/559
TDD
- 클린 코드 Chapter 9. 단위 테스트
- Test와 DisplayName 애노테이션에 대한 순서
- 가독성 측면에서 크게 해치지만 않는다면 순서는 상관 없다
- given, when, then 에 대한 주석은 다 작성하는 것이 좋은가?
- 리뷰이도 일부러 습관을 들이려고 주석을 남기기 시작
→ 주석 없이도 BDD 스타일로 코드를 작성하게 되면 안써도 괜찮을 것 같다!
- 리뷰이도 일부러 습관을 들이려고 주석을 남기기 시작
- 일반적으로 공개되지 않아도 되는 클래스나 메서드에서는 접근제어자를 생략하는 것을 추천
@Nested
: 다양한 시나리오에 많은 테스트 메서드들이 사용 되는 경우와 같이 테스트 단위가 큰 경우 사용- junit5 - assertAll
- 참고 : junit5 Intro
assertAll(
() -> assertEquals(2, score.getStrikes()),
() -> assertEquals(1, score.getBalls())
);
- 메서드의 동작보다는 검증하고 싶은 내용을 DisplayName에 담아보면 어떨까?
@DisplayName("numbers size는 3이다.")
-> @DisplayName("Set은 중복된 데이터를 허용하지 않는다.")
- size에 대한 검증인 경우 isEqualTo(size) 대신 hasSize(size)
assertThat(numbers.size()).isEqualTo(3);
-> assertThat(numbers).hasSize(3);
- 요구사항보다는 검증하고 싶은 내용을 DisplayName에 작성해주면 어떨까?
@DisplayName("Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습테스트를 구현한다.")
-> @DisplayName("Set은 중복된 데이터를 허용하지 않는다.")
- @ParameterizedTest에 값을 넣으면 가변 값 표현이 가능
→ @ParameterizedTest(name = "numbers {0} 값이 담겨져 있다.")
- Test Fail Message → as()
TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, HOBBIT);
// failing assertion, remember to call as() before the assertion, not after !
assertThat(frodo.getAge()).as("check %s's age", frodo.getName()).isEqualTo(100);
- 단위 테스트 작성에 대한 모범 사례
그 외
- 파일 끝은 개행으로 끝나는 것이 POSIX 표준
- 인텔리제이에서 자동으로 파일 끝에 개행을 추가하는 옵션
- 코드 내 비교하는 값은 상수 값으로 넣기(split(,) → 구분자 변수명을 SEPARATOR로 넣어보자)
- 테스트 메서드의 파라미터도 불변인 경우 final을 붙여주는게 어떨까?
void test(final String input, final String expected) {
// test
}
- 일급 컬렉션 : Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태
- 비지니스에 종속적인 자료구조
- Collection의 불변성을 보장
- 상태와 행위를 한 곳에서 관리
- 이름이 있는 컬렉션
- Pattern.compile() 은 비용이 비싸므로 static으로 사용하는 것을 권장
- enum 사용법
- enum의 비교는 equals가 아닌 == 으로
반응형