๐Ÿ“–
Aaron's TECH BOOK
  • Intro
    • About me
  • Lecture
    • Kubernetes
      • Begin Kubernetes
    • Kafka
      • Begin Kafka
    • Kotlin
      • TDD, Clean Code Preview
      • woowa Kotlin
    • Java
      • Multithread Concurrency
      • The Java
    • Toby
      • Toby Spring 6
      • Toby Spring Boot
    • MSA
      • 01.Micro Service
      • 02.DDD ์„ค๊ณ„
      • 03.DDD ๊ตฌํ˜„
      • 04.EDA ๊ตฌํ˜„
    • Spring Boot
    • Spring Batch
    • Spring Core Advanced
    • Spring DB Part II
    • Spring DB Part I
    • JPA API and Performance Optimization
    • JPA Web Application
    • JPA Programming Basic
    • Spring MVC Part 2
      • 01.Thymeleaf
      • 02.ETC
      • 03.Validation
      • 04.Login
      • 05.Exception
    • Spring MVC Part 1
      • 01.Servlet
      • 02.MVC
    • Http
      • 01.Basic
      • 02.Method
      • 03.Header
    • Spring Core
    • Study
      • Concurrency issues
      • First Come First Served
      • Performance Test
      • TDD
      • IntelliJ
  • Book
    • Kafka Streams in Action
      • 01.์นดํ”„์นด ์ŠคํŠธ๋ฆผ์ฆˆ
      • 02.์นดํ”„์นด ์ŠคํŠธ๋ฆผ์ฆˆ ๊ฐœ๋ฐœ
      • 03.์นดํ”„์นด ์ŠคํŠธ๋ฆผ์ฆˆ ๊ด€๋ฆฌ
    • Effective Kotlin
      • 01.์ข‹์€ ์ฝ”๋“œ
      • 02.์ฝ”๋“œ ์„ค๊ณ„
      • 03.ํšจ์œจ์„ฑ
    • ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ MSA
      • 01.๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
      • 02.๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™
      • 03-04.์ด๋ฒคํŠธ ์†Œ์‹ฑ
      • 05.๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ˜‘์—…
      • 06.๊ฒฐ๊ณผ์  ์ผ๊ด€์„ฑ
      • 07.CQRS
      • 08.UI
      • 09.ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ
    • ๋ชฝ๊ณ DB ์™„๋ฒฝ ๊ฐ€์ด๋“œ
      • I. ๋ชฝ๊ณ DB ์‹œ์ž‘
      • II. ๋ชฝ๊ณ DB ๊ฐœ๋ฐœ
    • Kotlin Cookbook
      • ์ฝ”ํ‹€๋ฆฐ ๊ธฐ์ดˆ
      • ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋Šฅ
      • ETC
    • Kotlin in Action
      • ํ•จ์ˆ˜/ํด๋ž˜์Šค/๊ฐ์ฒด/์ธํ„ฐํŽ˜์ด์Šค
      • ๋žŒ๋‹ค์™€ ํƒ€์ž…
      • ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ๊ณ ์ฐจ ํ•จ์ˆ˜
      • ์ œ๋„ค๋ฆญ์Šค, ์• ๋…ธํ…Œ์ด์…˜, ๋ฆฌํ”Œ๋ ‰์…˜
    • Kent Beck Tidy First?
    • ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ
      • 01.์‚ฌ์šฉ์ž ์ˆ˜์— ๋”ฐ๋ฅธ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ
      • 02.๊ฐœ๋žต์ ์ธ ๊ทœ๋ชจ ์ถ”์ •
      • 03.์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ณต๋žต๋ฒ•
      • 04.์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜ ์„ค๊ณ„
      • 05.์•ˆ์ • ํ•ด์‹œ ์„ค๊ณ„
      • 06.ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ ์„ค๊ณ„
      • 07.์œ ์ผ ID ์ƒ์„ฑ๊ธฐ ์„ค๊ณ„
      • 08.URL ๋‹จ์ถ•๊ธฐ ์„ค๊ณ„
      • 09.์›น ํฌ๋กค๋Ÿฌ ์„ค๊ณ„
      • 10.์•Œ๋ฆผ ์‹œ์Šคํ…œ ์„ค๊ณ„
      • 11.๋‰ด์Šค ํ”ผ๋“œ ์‹œ์Šคํ…œ ์„ค๊ณ„
      • 12.์ฑ„ํŒ… ์‹œ์Šคํ…œ ์„ค๊ณ„
      • 13.๊ฒ€์ƒ‰์–ด ์ž๋™์™„์„ฑ ์‹œ์Šคํ…œ
      • 14.์œ ํŠœ๋ธŒ ์„ค๊ณ„
      • 15.๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ์„ค๊ณ„
      • 16.๋ฐฐ์›€์€ ๊ณ„์†๋œ๋‹ค
    • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๐Ÿ“–
    • GoF Design Patterns
    • ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ
      • 01.๋„๋ฉ”์ธ ๋ชจ๋ธ ์‹œ์ž‘ํ•˜๊ธฐ
      • 02.์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”
      • 03.์• ๊ทธ๋ฆฌ๊ฑฐํŠธ
      • 04.๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์™€ ๋ชจ๋ธ ๊ตฌํ˜„
      • 05.Spring Data JPA๋ฅผ ์ด์šฉํ•œ ์กฐํšŒ ๊ธฐ๋Šฅ
      • 06.์‘์šฉ ์„œ๋น„์Šค์™€ ํ‘œํ˜„ ์˜์—ญ
      • 07.๋„๋ฉ”์ธ ์„œ๋น„์Šค
      • 08.์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
      • 09.๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ
      • 10.์ด๋ฒคํŠธ
      • 11.CQRS
    • Effective Java 3/E
      • ๊ฐ์ฒด, ๊ณตํ†ต ๋ฉ”์„œ๋“œ
      • ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์ œ๋„ค๋ฆญ
    • ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ
    • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ
    • Modern Java In Action
      • 01.๊ธฐ์ดˆ
      • 02.ํ•จ์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
      • 03.์ŠคํŠธ๋ฆผ๊ณผ ๋žŒ๋‹ค๋ฅผ ์ด์šฉํ•œ ํšจ๊ณผ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 04.๋งค์ผ ์ž๋ฐ”์™€ ํ•จ๊ป˜
    • Refactoring
      • 01.๋ฆฌํŽ™ํ„ฐ๋ง ์ฒซ ๋ฒˆ์งธ ์˜ˆ์‹œ
      • 02.๋ฆฌํŽ™ํ„ฐ๋ง ์›์น™
      • 03.์ฝ”๋“œ์—์„œ ๋‚˜๋Š” ์•…์ทจ
      • 06.๊ธฐ๋ณธ์ ์ธ ๋ฆฌํŽ™ํ„ฐ๋ง
      • 07.์บก์Аํ™”
      • 08.๊ธฐ๋Šฅ ์ด๋™
      • 09.๋ฐ์ดํ„ฐ ์กฐ์งํ™”
      • 10.์กฐ๊ฑด๋ถ€ ๋กœ์ง ๊ฐ„์†Œํ™”
      • 11.API ๋ฆฌํŒฉํ„ฐ๋ง
      • 12.์ƒ์† ๋‹ค๋ฃจ๊ธฐ
    • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด
      • 01.ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด
      • 02.์ด์ƒํ•œ ๋‚˜๋ผ์˜ ๊ฐ์ฒด
      • 03.ํƒ€์ž…๊ณผ ์ถ”์ƒํ™”
      • 04.์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ
      • 05.์ฑ…์ž„๊ณผ ๋ฉ”์‹œ์ง€
      • 06.๊ฐ์ฒด ์ง€๋„
      • 07.ํ•จ๊ป˜ ๋ชจ์œผ๊ธฐ
      • ๋ถ€๋ก.์ถ”์ƒํ™” ๊ธฐ๋ฒ•
    • Clean Code
    • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Powered by GitBook
On this page
  • ์ƒํ’ˆ ๋“ฑ๋ก ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
  • POJO
  • ์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
  • API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
  • JPA ์ ์šฉํ•˜๊ธฐ
  • ์ƒํ’ˆ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
  • ์ƒํ’ˆ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
  • POJO
  • ์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
  • API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
  • ์ƒํ’ˆ ์ฃผ๋ฌธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
  • ์ฃผ๋ฌธ ๊ฒฐ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
  • ์ƒ์„ธ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ
  • Point.
  1. Lecture
  2. Study

TDD

Last updated 1 year ago

๊ฐ•์˜๋ฅผ ์š”์•ฝํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์ƒํ’ˆ ๋“ฑ๋ก ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

POJO

Java POJO Test

(1) ํ•„์š”ํ•œ ์„œ๋น„์Šค ํ˜ธ์ถœ

productService.addProduct(request);
  • ํ•„์š”ํ•œ ๋™์ž‘์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค๋งŒ์œผ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

(2) ์„œ๋น„์Šค ํ˜ธ์ถœ์— ํ•„์š”ํ•œ Request ํด๋ž˜์Šค ์ƒ์„ฑ

final AddProductRequest request = new AddProductRequest(name, price, discountPolicy);
  • Request ํด๋ž˜์Šค๋Š” record ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • Assert ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ฆ

(3) ์„œ๋น„์Šค ํด๋ž˜์Šค ์ƒ์„ฑ

  • ๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ƒ์„ฑ

(4) ์–ด๋Œ‘ํ„ฐ ์ƒ์„ฑ

(5) ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ

  • ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ธ๋ฉ”๋ชจ๋ฆฌ(Map)๋กœ ๊ด€๋ฆฌ

Then -> Given -> When ์ˆœ์„œ๋กœ ์ ์„ฑํ•ด ๋ณด๊ธฐ

.

Move Inner class for test to Upper level

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์ž‘์„ฑ๋œ inner class ๋“ค์„ main class ๋กœ ์ด๋™

  • F6 ๋‹จ์ถ•ํ‚ค ํ™œ์šฉ

์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

์ˆœ์ˆ˜ ์ž๋ฐ”๋กœ ๊ตฌํ˜„๋œ ์„œ๋น„์Šค๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ์Šคํ”„๋ง ๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ „ํ™˜

  • service, adapter, repository ํด๋ž˜์Šค์— @Component ์„ ์–ธ

  • ๊ธฐ์กด ํ…Œ์ŠคํŠธ์— @SpringBootTest ์„ ์–ธ ๋ฐ ์„œ๋น„์Šค๋Š” @Autowired ๋กœ ์ฃผ์ž…

API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

API ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด io.rest-assured:rest-assured ์‚ฌ์šฉํ•˜๊ธฐ

  • rest-assured ๋Š” ๊ฒฉ๋ฆฌ๊ฐ€ ์ž˜ ์•ˆ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์กด์žฌ

    • ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹ฑ์ด ๋˜์–ด table sequence ๊ฐ€ ๊ผฌ์—ฌ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์งˆ ์ˆ˜ ์žˆ์Œ(ex. table sequence)

JPA ์ ์šฉํ•˜๊ธฐ

๊ธฐ์กด in-memory ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ jpa ๋กœ ์ ์šฉ

์ƒํ’ˆ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

์ƒํ’ˆ ๋“ฑ๋ก ๊ตฌํ˜„์œผ๋กœ ์ด๋ฏธ ๊ธฐ๋ฐ˜์ด ์žกํ˜€ ์žˆ์œผ๋ฏ€๋กœ POJO ๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  @SpringBootTest ๋กœ ์‹œ์ž‘

์ƒํ’ˆ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

POJO

์ƒํ’ˆ ๋“ฑ๋ก๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰.

(1) ํ•„์š”ํ•œ ์„œ๋น„์Šค ํ˜ธ์ถœ

productService.updateProduct(productId, request);

(2) ์„œ๋น„์Šค ํ˜ธ์ถœ์— ํ•„์š”ํ•œ Request record ํด๋ž˜์Šค ์ƒ์„ฑ

  • Assert ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ฆ

final UpdateProductRequest request = new UpdateProductRequest(name, price, discountPolicy);

(3) ์„œ๋น„์Šค์— ์ƒํ’ˆ ์ˆ˜์ • ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

(4) ์ƒํ’ˆ ์ˆ˜์ •์„ ์œ„ํ•œ ๋„๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋Š” ํ…Œ์ŠคํŠธ ํ•„์ˆ˜

  • Product.update

(4) StubClass ๋˜๋Š” Mockito ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ

์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

์ƒํ’ˆ ์ฃผ๋ฌธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

POJO

์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

JPA ์ ์šฉ

์ฃผ๋ฌธ ๊ฒฐ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

POJO

์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ

JPA ์ ์šฉ

์ƒ์„ธ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ

Point.

  • final keyword

  • record class

  • Assert in constructor

  • rest-assured api test

  • var type

  • HttpStatus

    • 200 OK

    • 201 CREATE

๊ฒฉ๋ฆฌ ๋ฐฉ๋ฒ•์€ ์ฐธ๊ณ 

์‹ค์ „! ์Šคํ”„๋ง๋ถ€ํŠธ ์ƒํ’ˆ-์ฃผ๋ฌธ API ๊ฐœ๋ฐœ๋กœ ์•Œ์•„๋ณด๋Š” TDD
ProductService addProduct test
Move Inner class for test to Upper leve
์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
3์›” ์šฐ์•„ํ•œํ…Œํฌ์„ธ๋ฏธ๋‚˜ / ์šฐ์•„ํ•œATDD
API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
in-memory to jpa
rest-assured ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ ์ฝ”๋“œ ์ถ”๊ฐ€
JPA ์ ์šฉํ•˜๊ธฐ
์ƒํ’ˆ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
์ƒํ’ˆ ์กฐํšŒ ๊ธฐ๋Šฅ API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜
์ƒํ’ˆ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ Stub ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ
Use Mockito instead of StubClass
POJO Test to SpringBoot Test
API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
POJO ์ƒํ’ˆ ์ฃผ๋ฌธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
Move Inner class for test to Upper leve
์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
JPA ์ ์šฉํ•˜๊ธฐ
POJO ์ฃผ๋ฌธ ๊ฒฐ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
API ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ธฐ
JPA ์ ์šฉํ•˜๊ธฐ
์ƒ์„ธ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ