Skill Up/우아한테크캠프 Pro 4기

[우아한테크캠프 Pro 4기] 1주차 미션 - TDD

2022. 5. 26. 09:00

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 스타일로 코드를 작성하게 되면 안써도 괜찮을 것 같다!
  • 일반적으로 공개되지 않아도 되는 클래스나 메서드에서는 접근제어자를 생략하는 것을 추천
    • 참고 : Test Classes and Methods
  • @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);
  • 단위 테스트 작성에 대한 모범 사례
    • 참고 : https://docs.microsoft.com/ko-kr/dotnet/core/testing/unit-testing-best-practices

 

그 외

  • 파일 끝은 개행으로 끝나는 것이 POSIX 표준
  • 인텔리제이에서 자동으로 파일 끝에 개행을 추가하는 옵션
  • 코드 내 비교하는 값은 상수 값으로 넣기(split(,) → 구분자 변수명을 SEPARATOR로 넣어보자)
  • 테스트 메서드의 파라미터도 불변인 경우 final을 붙여주는게 어떨까?
void test(final String input, final String expected) {
// test
}
  • 일급 컬렉션 : Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태
    1. 비지니스에 종속적인 자료구조
    2. Collection의 불변성을 보장
    3. 상태와 행위를 한 곳에서 관리
    4. 이름이 있는 컬렉션
  • Pattern.compile() 은 비용이 비싸므로 static으로 사용하는 것을 권장
  • enum 사용법
    • enum의 비교는 equals가 아닌 == 으로
반응형
'Skill Up/우아한테크캠프 Pro 4기' 카테고리의 다른 글
  • [우아한테크캠프 Pro 4기] 3주차 미션 - ATDD
  • [우아한테크캠프 Pro 4기] 2주차 미션 - JPA
  • [우아한테크캠프 Pro 4기] 프리코스 2주차 미션 회고 및 선발 결과
  • [우아한테크캠프 Pro 4기] 프리코스 1주차 미션 회고
프리미99
프리미99
train hard, big dream
프리미99
Rabbit in the Moon
프리미99
  • 분류 전체보기 (52)
    • Skills (20)
      • Java & Spring (7)
      • Framework (0)
      • Network (0)
      • Database (5)
      • Algorithm (7)
    • Skill Up (29)
      • dlwlrGOGO (7)
      • 우아한유스방 3기 (7)
      • 우아한테크캠프 Pro 4기 (15)
    • Tools (1)
      • Git (0)
      • IDE (1)
    • Project (0)
      • Spring 게시판 프로젝트 (0)
    • Review (2)
      • Seminar (2)
      • BOOK (0)

공지사항

최근 글

최근 댓글

전체
오늘
어제

블로그 메뉴

  • github
  • 글쓰기
  • 관리자
hELLO · Designed By 정상우.
프리미99
[우아한테크캠프 Pro 4기] 1주차 미션 - TDD
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.