베였
DCode
베였
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (218)
    • 곡지사항 (1)
    • μž‘μ„€ (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료ꡬ쑰 (2)
      • μ•Œκ³ λ¦¬μ¦˜ (Java) (14)
      • μ•Œκ³ λ¦¬μ¦˜ (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이둠적인거 (14)
      • λ³΄μ•ˆ (5)
      • 였λ₯˜ ν•΄κ²° (2)
      • λ””μžμΈ νŒ¨ν„΄ (5)
      • λ„€νŠΈμ›Œν¬ (1)
      • 기타 (1)
    • μ΅œμ‹ κΈ°μˆ  (4)
      • 블둝체인 (1)
    • [Project] (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸˆβ€β¬› GitHub
  • πŸ“« λ°©λͺ…둝
  • πŸ”– νƒœκ·Έ

곡지사항

인기 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
베였

DCode

Programming/[Spring Boot]

ν…ŒμŠ€νŠΈμ½”λ“œ μž‘μ„± (이둠편)

2023. 3. 16. 10:25
πŸ’‘
μš°λ¦¬κ°€ μž‘μ„±ν•œ μ½”λ“œλ‚˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 자체λ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ μž‘μ„±ν•œ μ½”λ“œ

ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 이유

  • 개발 κ³Όμ •μ—μ„œ 문제λ₯Ό 미리 λ°œκ²¬ν•  수 μžˆλ‹€.
  • λ¦¬νŒ©ν† λ§μ˜ λ¦¬μŠ€ν¬κ°€ 쀄어든닀.
  • μ• ν”„λ¦¬μΌ€μ΄μ…˜μ„ κ°€λ™ν•΄μ„œ 직접 ν…ŒμŠ€νŠΈν•˜λŠ” 것보닀 ν…ŒμŠ€νŠΈλ₯Ό λΉ λ₯΄κ²Œ μ§„ν–‰ν•  수 μžˆλ‹€.
  • ν•˜λ‚˜μ˜ λͺ…μ„Έ λ¬Έμ„œλ‘œμ„œμ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.
  • λͺ‡ κ°€μ§€ ν”„λ ˆμž„μ›Œν¬μ— 맞좰 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ 쒋은 μ½”λ“œλ₯Ό 생상할 수 μžˆλ‹€.
  • μ½”λ“œκ°€ μž‘μ„±λœ λͺ©μ μ„ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 있으며, λΆˆν•„μš”ν•œ λ‚΄μš©μ΄ μΆ”κ°€λ˜λŠ” 것을 λ°©μ§€ν•œλ‹€.

개발 κ³Όμ •μ—μ„œ 문제λ₯Ό 미리 λ°œκ²¬ν•  수 μžˆλ‹€.

λ¦¬νŒ©ν† λ§μ˜ λ¦¬μŠ€ν¬κ°€ 쀄어든닀.

λͺ…μ„Έ λ¬Έμ„œλ‘œμ„œμ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.


λ‹¨μœ„ ν…ŒμŠ€νŠΈ & 톡합 ν…ŒμŠ€νŠΈ

λ‹¨μœ„ ν…ŒμŠ€νŠΈ

πŸ’‘
μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ°œλ³„ λͺ¨λ“ˆμ„ λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜λŠ” 방식

λ©”μ„œλ“œ λ‹¨μœ„λ‘œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰

  • μ˜λ„ν•œ 결괏값이 λ‚˜μ˜€λŠ”μ§€ 확인
  • ν…ŒμŠ€νŠΈ λΉ„μš©μ΄ 적음

톡합 ν…ŒμŠ€νŠΈ

πŸ’‘
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄ λ‹€μ–‘ν•œ λͺ¨λ“ˆμ„ κ²°ν•©ν•΄ 둜직이 μ˜λ„ν•œ λŒ€λ‘œ λ™μž‘ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ

μ—¬λŸ¬ λͺ¨λ“ˆμ„ ν•¨κ»˜ ν…ŒμŠ€νŠΈν•΄μ„œ 정상 둜직 μˆ˜ν–‰μ΄ κ°€λŠ₯ν•œμ§€ 확인

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜¨μ „νžˆ λ™μž‘ν•˜λŠ”μ§€λ₯Ό ν…ŒμŠ€νŠΈ
  • λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— λΉ„μš©μ΄ μ»€μ§€λŠ” 단점이 있음

ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 방법

Given-When-Then νŒ¨ν„΄

ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό β€˜λͺ…세’ λ¬Έμ„œμ˜ 역할을 μˆ˜ν–‰ν•˜λ„λ‘ ν•œλ‹€.

Given

  • ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° 전에 ν•„μš”ν•œ ν™˜κ²½μ„ μ„€μ •

When

  • ν…ŒμŠ€νŠΈμ˜ λͺ©μ μ„ λ³΄μ—¬μ£ΌλŠ” 단계
  • μ‹€μ œ ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ 포함

Then

  • ν…ŒμŠ€νŠΈμ˜ κ²°κ³Όλ₯Ό κ²€μ¦ν•˜λŠ” 단계
  • When λ‹¨κ³„μ—μ„œ λ‚˜μ˜¨ 결괏값을 κ²€μ¦ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰

F.I.R.S.T μ „λž΅

λΉ λ₯΄κ²Œ(Fast)

  • ν…ŒμŠ€νŠΈ μ†λ„λŠ” λΉ λ₯΄κ²Œ 진행돼야 ν•œλ‹€.

고립된, 독립적(Isolated)

  • ν•˜λ‚˜μ˜ λŒ€μƒμ— λŒ€ν•΄μ„œλ§Œ μˆ˜ν–‰λΌμ•Ό ν•œλ‹€.
  • μ™ΈλΆ€ μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•΄μ„  μ•ˆλœλ‹€.

반볡 κ°€λŠ₯ν•œ(Repeatable)

  • μ–΄λ–€ ν™˜κ²½μ—μ„œλ„ 반볡 κ°€λŠ₯ν•˜λ„λ‘ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

μžκ°€ 검증(Self-Validating)

  • ν…ŒμŠ€νŠΈκ°€ μ„±κ³΅ν–ˆλŠ”μ§€ μ‹€νŒ¨ν–ˆλŠ”μ§€ 확인할 수 μžˆλŠ” μ½”λ“œλ₯Ό ν•¨κ»˜ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

μ μ‹œμ—(Timely)

ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ° 전에 완성돼야 ν•œλ‹€.


JUnit을 ν™œμš©ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

JUnit의 ꡬ성

JUnit Platform

  • ν…ŒμŠ€νŠΈ μ—”μ§„μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가짐
  • ν…ŒμŠ€νŠΈλ₯Ό λ°œκ²¬ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜λ©°, κ·Έ κ²°κ³Όλ₯Ό λ³΄κ³ ν•˜λŠ” 역할을 μˆ˜ν–‰

JUnit Jupiter

  • API의 κ΅¬ν˜„μ²΄λ₯Ό 포함
  • Jupiter 기반의 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ ν…ŒμŠ€νŠΈ 엔진을 가짐

JUnit Vintage

  • ν…ŒμŠ€νŠΈ μ—”μ§„ APIλ₯Ό κ΅¬ν˜„

spring-boot-starter-test

지원 라이브러리

  • JUnit 5 : μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μ§€μ›ν•œλ‹€.
  • Spring Test & Spring Boot Test : μŠ€ν”„λ§ λΆ€νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ μœ ν‹Έλ¦¬ν‹°μ™€ 톡합 ν…ŒμŠ€νŠΈλ₯Ό μ§€μ›ν•œλ‹€.
  • AssertJ : λ‹€μ–‘ν•œ 단정문(assert)을 μ§€μ›ν•˜λŠ” 라이브러리
  • Hamcrest : Matcherλ₯Ό μ§€μ›ν•˜λŠ” 라이브러리
  • Mockito : μžλ°” Mock 객체λ₯Ό μ§€μ›ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬
  • JSONassert : JSON용 단정문 라이브러리
  • JsonPath : JSON용 XPathλ₯Ό μ§€μ›ν•˜λŠ” 라이브러리

JUnit의 생λͺ…μ£ΌκΈ°

  • @Test : ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό ν¬ν•¨ν•œ λ©”μ„œλ“œλ₯Ό μ •μ˜
  • @BeforeAll : 전체 ν…ŒμŠ€νŠΈλ₯Ό μ‹œμž‘ν•˜κΈ° 전에 ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜
  • @BeforeEach : 각 ν…ŒμŠ€νŠΈ λ©”μ„œλ“œκ°€ μ‹€ν–‰λ˜κΈ° 전에 λ™μž‘ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜
  • @AfterAll : 전체 ν…ŒμŠ€νŠΈλ₯Ό μ’…λ£Œν•˜λ©΄μ„œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜
  • @AfterEach : 각 ν…ŒμŠ€νŠΈ λ©”μ„œλ“œκ°€ μ’…λ£Œλ˜λ©΄μ„œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜

Uploaded by N2T

'Programming > [Spring Boot]' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Spring Data JPA] - 쿼리 λ©”μ„œλ“œμ˜ 쑰건자 ν‚€μ›Œλ“œ  (0) 2023.03.29
ν…ŒμŠ€νŠΈ 주도 개발(TDD)  (0) 2023.03.16
컨트둀러 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±  (0) 2023.03.16
Gson  (0) 2023.03.16
μ„œλΉ„μŠ€ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±  (0) 2023.03.16
    'Programming/[Spring Boot]' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Spring Data JPA] - 쿼리 λ©”μ„œλ“œμ˜ 쑰건자 ν‚€μ›Œλ“œ
    • ν…ŒμŠ€νŠΈ 주도 개발(TDD)
    • 컨트둀러 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
    • Gson
    베였
    베였

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”