ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [์ฐจ๊ทผ์ฐจ๊ทผ ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ] 02. BackEnd: Test - JUnit 5
    ๐ŸณDev/์ฐจ๊ทผ์ฐจ๊ทผ ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ 2021. 12. 27. 15:04

    ๐ŸณJUnit

    JUnit์€ Java์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๋„๊ตฌ์ด๋‹ค. ์ฆ‰, ๋‚ด ์ฝ”๋“œ๊ฐ€ ๋‚ด ์˜๋„๋Œ€๋กœ ์ž˜ ๋™์ž‘ํ•˜๋Š” ์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๋‹ค. Annotation์œผ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‹จ์ •๋ฌธ(assert)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

    ์Šคํ”„๋ง ์ด๋‹ˆ์…œ๋ผ์ด์ฆˆ๋กœ ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋Š” build.gradle ํŒŒ์ผ์— spring-boot-starter-test๊ฐ€ ๋””ํŽœ๋˜์‹œ์— ์ถ”๊ฐ€๋˜์–ด ๋‚ด์žฅ๋œ JUnit์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(SpringTest, Spring Boot Test, AssertJ, Hamcrest, Mockito, JSONassert, JsonPath)

    ์•„๋ฌด๊ฒƒ๋„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. main๊ณผ test์— ๊ฐ™์€ ๊ตฌ์กฐ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. test ๋””๋ ‰ํ† ๋ฆฌ์—์„œ testing์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. test ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

     

    UnitTest By Martin Fowler

    ์œ ๋‹› ํ…Œ์ŠคํŠธ(Unit Test)๋Š” XP(Extreme Programming, ์ดˆ๊ธฐ ์—์ž์ผ)์˜ ํŠน์ง•์ ์ธ ํ™œ๋™์ด๋ฉฐ, ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ฒŒ ์ด๋Œ์—ˆ๋‹ค. ์œ ๋‹› ํ…Œ์ŠคํŠธ๋Š” ์„ธ๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ๋‹ค. ๋จผ์ € ์œ ๋‹›ํ…Œ์ŠคํŠธ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ์ž‘์€ ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉฐ, ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ๋ฐฉ์‹๋ณด๋‹ค ๋น ๋ฅด๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•œ๋‹ค.

    ์œ ๋‹›ํ…Œ์ŠคํŠธ๋Š” ํด๋ž˜์‹ ์Šคํƒ€์ผ๊ณผ Mock์Šคํƒ€์ผ๋กœ ๋ฐœ์ „๋˜์—ˆ๋‹ค. ํด๋ž˜์‹์€ ํ˜‘๋™ ์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ตฌํ•˜๊ณ , Mock์€ ๋‹จ๋… ์œ ๋‹›ํ…Œ์ŠคํŠธ๋ฅผ ๊ณ ์ง‘ํ•œ๋‹ค.

     

    MockMVC

    MockMVC๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜์ง€ ์•Š๊ณ ๋„ ์Šคํ”„๋ง MVC ๋™์ž‘์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” Spring-test ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํด๋ž˜์Šค์ด๋‹ค.


    ๐Ÿ”ŽTesting ์‹œ์ž‘ํ•˜๊ธฐ

    ๋จผ์ € AbstractTest ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ํ…Œ์ŠคํŠธ ์„ค์ •์„ ํ•ด์ฃผ๊ณ , ์ด๋ฅผ ์ƒ์†๋ฐ›์•„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ์‹์„ ์ทจํ•œ๋‹ค. WebApplicationContext๋Š” MockMVC ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ฃผ๊ณ , setup ๋ฉ”์†Œ๋“œ์—์„œ mvc๋ฅผ build ํ•ด์ค€๋‹ค.

    @BeforeEach๋Š” JUnit5์˜ Annotation์œผ๋กœ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ฐ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ ์ „์— ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค. JUnit5 ์ด์ „์—๋Š” Before์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์“ฐ์˜€๋‹ค.

    ์ด์ œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ DempApplicationTests์„ ์ƒ์„ฑํ–ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” AbstractTest ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ, ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ์œ„์—๋Š” @Test์ด ๋ถ™์–ด์žˆ๋‹ค. ์•„๋ž˜ this.mockMvc์˜ ๊ตฌ์„ฑ์„ ๋ณด์ž. .perform์„ ํ†ตํ•ด ์š”์ฒญ์„ ์ „์†กํ•˜๊ณ  ResultActions ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ฐ˜ํ™˜๊ฐ’์„ andExpect๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒ€์ฆ ๋Œ€์ƒ์œผ๋กœ๋Š” ์ƒํƒœ ์ฝ”๋“œ, ๋ทฐ ์ด๋ฆ„, ๋ฆฌํƒ€์ด๋ ‰ํŠธ ์‘๋‹ต, ๋ชจ๋ธ ์ •๋ณด, ์‘๋‹ต ์ •๋ณด ๋“ฑ์„ ํ†ตํ•ด์„œ ์˜๋„ํ•œ ๊ฐ’๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์œ„์˜ ์ด๋ฏธ์ง€์—์„œ ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด Post๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๋ฏ€๋กœ, PostRequest์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ Post์˜ title๊ณผ content์— ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ์ด๋ฅผ mockMvc์— ๋ณด๋‚ด์–ด ํ…Œ์ŠคํŠธํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ด๋•Œ ๊ฐ์ฒด์ธ PostRequest๋ฅผ JSONํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์ผ์„ JacksonUtil ํŒŒ์ผ์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    Test๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    Application Context

    Application Context๋Š” ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” Bean๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ application context๋Š” ์•„๋ž˜ ๋‘๊ฐœ๋กœ ๋‚˜๋‰œ๋‹ค. (์ž์„ธํ•œ ๊ฒƒ์€ ๋‚˜์ค‘์— ๋” ์•Œ์•„๋ณด์ž)

    • ContextLoaderListener์— ์˜ํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” Root WebApplicationContext
    • DispatcherServlet์— ์˜ํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” WebApplicationContext

     

    Jackson

    Jackson์€ ์Šคํ”„๋ง์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, XML๊ณผ JSON ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ๋น„์Šทํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” GSON๊ณผ SimpleJSON์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Spring 3.1์ดํ›„๋กœ Jackson์„ ํ†ตํ•ด ๊ฐ์ฒด๋งŒ ๋ฐ˜ํ™˜ํ•ด๋„ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


    Reference

    https://medium.com/@joohotheman/%EB%B2%88%EC%97%AD-unittest-by-martin-fowler-2fbba01a782e
    https://unordinarydays.tistory.com/131
    https://galid1.tistory.com/476
    https://mommoo.tistory.com/83
    https://shinsunyoung.tistory.com/52

Designed by Tistory.