Mission1. Baseball-Unit Test

Properties

πŸ“2024.06.16

πŸ’» source_code

λ„₯슀트 μŠ€ν…: μžλ°” ν”Œλ ˆμ΄κ·ΈλΌμš΄λ“œ - 숫자 μ•Όκ΅¬κ²Œμž„

μˆ«μžμ•Όκ΅¬κ²Œμž„ - ν•™μŠ΅ ν…ŒμŠ€νŠΈ μ‹€μŠ΅


StringClass ν•™μŠ΅ ν…ŒμŠ€νŠΈ


βœ… μš”κ΅¬μ‚¬ν•­ 1

  • "1, 2"을 ,둜 split ν–ˆμ„ λ•Œ 1κ³Ό 2둜 잘 뢄리 λ˜λŠ”μ§€ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±

  • "1"을 ,둜 split ν–ˆμ„ λ•Œ 1λ§Œμ„ ν¬ν•¨ν•˜λŠ” 배열이 λ°˜ν™˜ λ˜λŠ”μ§€ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±

힌트 ν‚€μ›Œλ“œ

  • assertj contains()

  • assertj containsExactly()

λ‚΄μš©

ν•™μŠ΅ ν‚€μ›Œλ“œκ°€ μ–΄λ–€ 상황에 μ–΄λ–€ ν…ŒμŠ€νŠΈ λ©”μ„œλ“œλ‘œ 검증 ν•΄μ•Ό ν•˜λŠ”μ§€ λͺ…ν™•ν•˜κ²Œ λ‚˜μ™€ μžˆμ—ˆκΈ° λ•Œλ¬Έμ— μ–΄λ €μš΄ λ‚΄μš©μ΄ μ—†μ—ˆλ‹€. λ³Έ λ―Έμ…˜μ„ λ“€μ–΄κ°€κΈ° μ „ λ―Έμ…˜μ„ 진행 ν•˜λŠ” 방법을 μ•Œλ €μ£ΌλŠ” μ›Œλ°μ—… 단계 인 것 κ°™λ‹€. κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  Java μƒνƒœκ³„μ—μ„œ 싀무λ₯Ό ν•˜κ³  μžˆμ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— ꡬ글링을 λ°”νƒ•μœΌλ‘œ λ―Έμ…˜μ„ ν•΄κ²° ν•˜κ³ μžˆλ‹€.

참고 자료

βœ… μš”κ΅¬μ‚¬ν•­ 2

  • "(1,2)" 값이 μ£Όμ–΄μ‘Œμ„ λ•Œ ()을 μ œκ±°ν•˜κ³  "1,2"λ₯Ό λ°˜ν™˜ν•˜λŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±

힌트 ν‚€μ›Œλ“œ

  • String substring

λ‚΄μš©

μš”κ΅¬μ‚¬ν•­ 1λ²ˆμ„ ν•΄κ²° ν•˜λ©΄μ„œ λ‚˜λ¦„μ˜ 눈치λ₯Ό λ°°μ› λŠ”μ§€ μ–΄λ– ν•œ 검색도 없이 λ°”λ‘œ String 클래슀의 substring에 μ ‘κ·Ό ν•΄μ„œ μ›ν•˜λŠ” 데이터λ₯Ό 뽑은 ν›„ 검증을 진행 ν–ˆλ‹€.

βœ… μš”κ΅¬μ‚¬ν•­ 3

  • "abc" 값이 μ£Όμ–΄μ‘Œμ„ λ•Œ νŠΉμ • μœ„μΉ˜μ˜ 문자λ₯Ό κ°€μ Έμ˜¨ ν›„ 검증 ν•˜λŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±

  • IndexOutOfBound Exception μΌ€μ΄μŠ€ μž‘μ„±

  • DisplayName으둜 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•œ λ‚΄μš© μž‘μ„±

힌트 ν‚€μ›Œλ“œ

λ‚΄μš©

DisplayName ν…ŒμŠ€νŠΈ λ©”μ„œλ“œλ₯Ό 보자마자 λ‹€λ₯Έ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—λ„ λͺ¨λ‘ μž‘μ„± 해쀬닀. κΈ°μ‘΄μ—λŠ” 파이썬의 Docstring ν˜•νƒœλ‘œ 주석을 λ‹¬μ•„μ„œ μ‚¬μš© ν•˜λ €κ³  ν–ˆμ§€λ§Œ 맀우 μœ μš©ν•œ λ©”μ„œλ“œκ°€ μžˆμ—ˆκΈ° λ•Œλ¬Έμ— μ•ˆ μ“Έ μ΄μœ κ°€ μ—†μ—ˆλ‹€.

νžŒνŠΈμ— 제곡 ν•΄μ€€ λ¬Έμ„œλ₯Ό 보자마자 λ°”λ‘œ ν•΄κ²° ν•  수 μžˆμ„ 것 κ°™λ‹€κ³  νŒλ‹¨ ν–ˆλŠ”λ° λ¬Έμ„œμ— λͺ…μ‹œ 된 상황과 λ‚΄κ°€ μž‘μ„±ν•˜λŠ” 상황과 μœ μ‚¬ν•œ λŠλ‚Œμ΄ 듀지 μ•Šμ•„μ„œ ꡬ글링을 ν•œ 번 더 ν•˜μ—¬ μ •ν™•ν•˜κ²Œ ν‚€μ›Œλ“œλ₯Ό λ½‘μ•„λ‚΄μ—ˆλ‹€. κ²°κ΅­ assertThatThrownBy λ‚΄λΆ€μ—μ„œ μ‹€ν–‰ ν•œ ν•¨μˆ˜λ₯Ό Exception 으둜 μž‘μ€ λ’€ 체이닝 λ°©μ‹μœΌλ‘œ 검증을 μ΄μ–΄λ‚˜κ°ˆ 수 μžˆλ‹€λŠ” κ±Έ λ°°μ› λ‹€. μ΄λ ‡κ²Œ 되면 Given, When, Then ꡬ쑰가 μ •ν™•ν•˜κ²Œ λ‚˜μ˜¨λ‹€.

  • Given: "abc" κ°’

  • When: charAt(4) 을 assertThatThrownByλ₯Ό 이용 ν•˜μ—¬ Exception객체둜 λ³€ν™˜

  • Then: isInstanceOf, hasMessageContaining 을 μ΄μš©ν•œ 검증

참고 자료

SetCollection ν•™μŠ΅ ν…ŒμŠ€νŠΈ


Fixture

    @BeforeEach
    void setUp() {
        numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
    }

βœ… μš”κ΅¬μ‚¬ν•­ 1

  • Fixture numbers의 size λ©”μ„œλ“œλ₯Ό ν™œμš©ν•΄ 데이터 크기 검증

힌트 ν‚€μ›Œλ“œ

  • μ—†μŒ

λ‚΄μš©

μ›Œλ‚™ κ°„λ‹¨ν•œ μ½”λ“œμ΄κΈ°λ„ ν•˜κ³ , μš”κ΅¬μ‚¬ν•­μ΄ λͺ…ν™•ν–ˆκΈ° λ•Œλ¬Έμ— νŠΉλ³„ν•œ 검색 없이 λ°”λ‘œ 검증을 ν•  수 μžˆμ—ˆλŠ”λ° StringClass ν•™μŠ΅ ν…ŒμŠ€νŠΈ νŒŒμΌμ€ 기쑴에 μŠ€μΌˆλ ˆν†€ μ½”λ“œ ν˜•μ‹μœΌλ‘œ μž‘μ„± λ˜μ–΄μžˆλŠ” 뢀뢄이 μžˆμ—ˆλ‹€. ν•˜μ§€λ§Œ, SetCollection ν•™μŠ΅ ν…ŒμŠ€νŠΈ νŒŒμΌμ€ Scratch둜 λ‹€μ‹œ μž‘μ„± ν•΄μ•Όν–ˆκΈ° λ•Œλ¬Έμ— import ν•˜λŠ” λ‚΄μš©μ΄ μ΄λ ‡κ²Œ λ§Žμ•˜μ—ˆλ‚˜ μ‹Άμ—ˆλ‹€.

참고 자료

  • μ—†μŒ

βœ… μš”κ΅¬μ‚¬ν•­ 2

  • Fixture numbers의 contains λ©”μ„œλ“œλ₯Ό ν™œμš©ν•΄ 데이터 쑴재 μ—¬λΆ€ 검증

    • 단, 반볡 λ˜λŠ” μ½”λ“œλ₯Ό μ΅œμ ν™” ν•  것

힌트 ν‚€μ›Œλ“œ

λ‚΄μš©

Parameterized TestλŠ” StringClass ν•™μŠ΅ ν…ŒμŠ€νŠΈ λ‹Ήμ‹œ μ‚¬μš© ν•΄λ΄€κΈ° λ•Œλ¬Έμ— λ‚΄μš©μ„ μ–΄λŠμ •λ„ μ•Œκ³  μžˆμ—ˆλ‹€. μ•„λŠ”λ“― ν•œ λŠλ‚Œμ΄ μ•„λ‹Œ μ•ˆλ‹€κ³  ν™•μ‹  ν•  수 μžˆμ—ˆκΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή μš”κ΅¬μ‚¬ν•­λ„ 별 λ‹€λ₯Έ 검색 없이 진행 ν•  수 μžˆμ—ˆλ‹€.

참고 자료

  • μ—†μŒ

βœ… μš”κ΅¬μ‚¬ν•­ 3

  • Fixture numbers의 contains λ©”μ„œλ“œλ₯Ό ν™œμš©ν•΄ 데이터 유무 검증 및 μ˜ˆμ™Έ μΌ€μ΄μŠ€(쑴재 ν•˜μ§€ μ•ŠλŠ” 데이터 일 λ•Œ) 검증

힌트 ν‚€μ›Œλ“œ

  • Parameterized Test의 @CsvSource

λ‚΄μš©

ν…ŒμŠ€νŠΈ λ©”μ„œλ“œμ— Key, Value둜 λ§€ν•‘λ˜λŠ” 값을 받을 수 μžˆμ–΄ 정적인 데이터λ₯Ό 검증 ν•  λ•Œ νŽΈλ¦¬ν–ˆλ‹€. κ·Έ 쀑 처음 StringClass ν•™μŠ΅ ν…ŒμŠ€νŠΈ λ•Œ μ‚¬μš© ν–ˆμ„ 땐 delimiter λ₯Ό λͺ°λžμ—ˆλ˜ 터라 μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ‰Όν‘œλ‘œ ꡬ뢄 ν–ˆμ—ˆλŠ”λ° 콜둠으둜 ꡬ뢄 ν•  수 μžˆμ–΄μ„œ 가독성이 쑰금 더 λ‚˜μ•„μ§„ 것 κ°™λ‹€.

참고 자료

  • μ—†μŒ

Last updated