-
Notifications
You must be signed in to change notification settings - Fork 5
๐งพ @Nested
JUnit 5์์ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก, ํ ์คํธ ํด๋์ค ๋ด์ ์ค์ฒฉ๋(inner) ํ ์คํธ ํด๋์ค๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. @Nested๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ์ผ ํ ์คํธ ํด๋์ค ๋ด์์ ํ ์คํธ ํด๋์ค๋ฅผ ์ข ๋ ๊ตฌ์กฐ์ ์ผ๋ก ๋๋ ์ ์์ผ๋ฉฐ, ๊ฐ ๋ด๋ถ ํ ์คํธ ํด๋์ค๋ ํน์ ์ํ๋ ๋์์ ๊ด๋ จ๋ ํ ์คํธ๋ฅผ ๊ทธ๋ฃนํํ ์ ์๋ค.
- ์ค์ฒฉ๋ ํ
์คํธ ํด๋์ค
-
@Nested
์ด๋ ธํ ์ด์ ์ ํน์ ํ ์คํธ ํด๋์ค ๋ด์ ๋ ผ๋ฆฌ์ ์ธ ํ์ ํ ์คํธ ํด๋์ค๋ฅผ ์ ์
-
- ์ํ ๊ณต์
- ์ค์ฒฉ๋ ํ ์คํธ ํด๋์ค๋ ๋ฐ๊นฅ์ชฝ ํ ์คํธ ํด๋์ค์ private ํ๋์ ๋ฉ์๋์ ์ ๊ทผํ ์ ์์ด์, ์ํ๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ํน์ ์ํ์์์ ๋์์ ํ ์คํธํ๊ธฐ ์ฉ์ด
- ๊ตฌ์กฐ์ ์ธ ํ
์คํธ
-
@Nested
๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ ํด๋์ค๋ฅผ ์ข ๋ ๊ตฌ์กฐ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ๋ฉ์๋์ ๋ํ ์ฑ๊ณต, ์คํจ, ์์ธ ์ํฉ ๋ฑ์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ค์ฒฉ ํด๋์ค๋ก ๋๋ ์ ์์
-
- ์ฝ๊ธฐ ์ฌ์ด ํ
์คํธ ์ฝ๋
- ์ค์ฒฉ๋ ํ ์คํธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ ์ฝ๋๋ฅผ ์ข ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ๊ฐ์ ์ค์ฒฉ๋ ํด๋์ค๋ ํน์ ์ฑ ์์ด๋ ์ํฉ์ ์ง์คํ ์ ์์
Copyright โ 2023
1์ฅ
๐ 1์ฅ
๐ 2์ฅ
๊ตฌ๊ฐ 1
์ด ๊ธ์ ์ฑ ์ ์ฝ์ ํ ์ฑ ๋ณธ๋ฌธ์ ์ธ์ฉํ๊ฑฐ๋ ๊ธ์ด์ด์ ์๊ฐ์ ๊ฐ๋ฏธํ์ฌ ์์ฑ ํ ๊ธ์ ๋๋ค. ๋ฐ๋ผ์ ์ฑ ์ ๋ํ ๋ด์ฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ ๊ฒ์, ์ง์ ์ฑ ์ ์ฝ๊ณ ์ดํดํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋ฒ ์คํธ์ ๋๋ค.
๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋ชจ๋ ์ฝ๋๋ ํ ์คํธ๋ฅผ ํ๊ฒ ๋์ด์๋ค. ์ด๋ ํ ์ปดํฌ๋ํธ๊ฐ ์ค์ ๊ตฌ๋ํ๊ฒฝ์์๋ ์ ๋๋ก ๋์ํ๋์ง๋ ์ถฉ๋ถํ ํ ์คํธ๋ฅผ ๊ฑฐ์น์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ ์ฆ๋ช ํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ณดํต ํ ์คํธ๋ฅผ ํ๋ฉด ์ด๋ป๊ฒ ํ๋์ง ์๊ฐํด๋ณด๋ฉด, ์ง์ ์ฝ๋๋ฅผ ์คํํ๊ณ ์ปดํ์ผ ๋ ๋ฒจ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ฉด ํ ์คํธ ์ผ์ด์ค๋ฅผ ํตํด ์ง์ ํ๋ ํ๋ ์ก์ ์ ์ทจํ๋ฉด์ ๋์์ด ์ ํ๋์ง ํ์ธ์ ํ๊ณ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ํ๋ก๊ทธ๋จ์ ๋ฉ์ถ ํ ์๋ฌ๊ฐ ๋ฐ์ํ ์ฝ๋๋ฅผ ์ฐพ์๊ฐ ๊ณ ์ณ๊ฐ๋ ๋ฐฉ์์ ํ๋ค. ์๋ฐ์ ํ๊ฒฝ์์๋ผ๋ฉด ์ต์ ์ ์ ํตํด ์๋ฌ๊ฐ ์ ๋ฐ ๋ ๋ถ๋ถ์ ๋ํด ํ๋ก๊ทธ๋จ์ด ๋ฉ์ถ์ง ์๋๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ด์ง๋ง ๊ฒฐ๊ตญ ๊ณ ์ณ์ผ ํ๋๊ฑด ๋งคํ๊ฐ์ง๋ค. ์ด๋ฌํ ํ ์คํธ๋ฅผ ํ๋ค๋ณด๋ฉด ๊ฒฐ๊ตญ ํ ์คํธ ์ผ์ด์ค ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ๋ฑ๋ก, ์๋ฌํ์ธ, ์์ ์ ๋ฐ๋ณต์ ์ผ๋ก ํ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ์ ์ด๋์ ํ๋ํ๋ ํ์ธํ๋ฉด์ ๊ฒ์ฆํ๋ ๊ฐ๋ฐ์๋ ์ด ํ์๋ฅผ ์ข์ํ๊ฒ ์ง๋ง ๊ฒ์ฆ ๊ณผ์ ์ ์์ด ์๊ฐ์ด ๊ฐ๋ฐํ๋๋งํผ ๋ค ์ ์์ผ๋ฏ๋ก ์ข์ํ์ง ์๋ ๊ฐ๋ฐ์๋ ๋ถ๋ช ํ ์๋ค. JUint์ ์ด ๋ฐ๋ณต์ ์ธ ํ ์คํธ ํ์๋ฅผ ๊ฐํธํ๊ฒ ํํ๋๋ก ํด์ฃผ๋ ํ ์คํธ ํ๋ ์์ํฌ ์ด๋ค. ์ด JUnit์ ์์ ์๊ธฐํ ์ผ๋ จ์ ํ ์คํธ๊ฐ ์๋ํ๋์ด ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํ์์์๋ก ๋ค์ด๊ฐ๋ฉด ์ข๊ฒ ๋ค ์๊ฐํ '์๋ฆญ ๊ฐ๋ง'์ '์ผํธ ๋ฐฑ' ๋ ๊ฐ๋ฐ์๊ฐ ๋ง๋ SUnit์ด ์๋ฐ์ ์ด๋ค.
JUnit์ ์ค๊ณ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง์ด๋ค.
ย ย - ์ ์ฉํ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐ ๋ณดํฌ์ด ๋์ด์ผ ํ๋ค.
ย ย - ์๊ฐ์ด ์ง๋๋ ๊ฐ์น๊ฐ ๋ณ์น ์๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐ ๋ณดํฌ์ด ๋์ด์ผ ํ๋ค.
ย ย - ์ฝ๋ ์ฌ์ฌ์ฉ์ ํตํด ํ ์คํธ ์์ฑ ๋น์ฉ์ ๋ฎ์ถ๋ ๋ฐ ๋ณดํฌ์ด ๋์ด์ผ ํ๋ค.
๋จ์ํ ์คํธ๋ ๋ช ํํ ์์ ๋จ์์ ๋์์ ๊ฒ์ฌํ๋ค. ๋ช ํํ ์์ ๋จ์๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ์ฃผํ๋ค. ํตํฉํ ์คํธ๋ ์ธ์ํ ์คํธ๋ ๋ค์ํ ์ปดํฌ๋ํธ ๋๋ ์ธ๋ถํ๊ฒฝ ์ฌ์ด์ ์ํธ์์ฉ์ ๊ฒ์ฆํ๋ค. ์ฆ ๋จ์ํ ์คํธ๋ ์ด๋ค ๋ค๋ฅธ ์์ ์๋ ์ง์ ์ ์ผ๋ก ์ํฅ์ ๋ฐ์ง ์๋ ์์ ๋จ์์ ํ ์คํธ๋ฅผ ์ผ์ปซ๋๋ค.
ย ย - ๋จ์ ํ ์คํธ๋ ๋ค๋ฅธ ๋ชจ๋ ๋จ์ ํ ์คํธ๋ค๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ด์ผ ํ๋ค.
ย ย - ํ๋ ์์ํฌ๋ ํ ์คํธ ๊ฐ๊ฐ์ ์ค๋ฅ๋ฅผ ์๋ณํ๊ณ ๋ณด๊ณ ํด์ผ ํ๋ค.
ย ย - ์ด๋ค ํ ์คํธ๋ฅผ ์คํํ ์ง ์ ํํ๊ธฐ ์ฌ์์ผ ํ๋ค.
๊ตฌ๊ฐ 2
์ดย ๊ธ์ย ์ฑ ์ย ์ฝ์ย ํย ์ฑ ย ๋ณธ๋ฌธ์ย ์ธ์ฉํ๊ฑฐ๋ย ๊ธ์ด์ด์ย ์๊ฐ์ย ๊ฐ๋ฏธํ์ฌย ์์ฑย ํย ๊ธ์ ๋๋ค.ย ๋ฐ๋ผ์ย ์ฑ ์ย ๋ํย ๋ด์ฉ์ย ์ฌ๋ฐ๋ฅด๊ฒย ์ดํดํ๋ย ๊ฒ์,ย ์ง์ ย ์ฑ ์ย ์ฝ๊ณ ย ์ดํดํ๋ย ๊ฒ์ดย ๊ฐ์ฅย ๋ฒ ์คํธ์ ๋๋ค.
ย ย - public class ์ฌ์ผ ํ๊ณ , ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ง ์๋ ์์ฑ์๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
ย ย - ํ ์คํธ ๋ฉ์๋๋ @Test ์ ๋ ธํ ์ด์ ์ด ์์ด์ผ ํ๊ณ , public์ด๊ณ , ํ๋ผ๋ฏธํฐ๋ ๋ฐ์์๋ ์๋๋ค. ๋ฐํํ์ void์ฌ์ผ ํ๋ค.
ย ย - JUnit์ ๊ฐ @Test ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ํ ์คํธ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ๋ฉฐ ๋ชจ๋ ํ ์คํธ ๋ฉ์๋๋ ๊ฐ๊ธฐ ๋คย ย ย ย ๋ฅธ ํ ์คํธ ํด๋์ค ์ธ์คํด์ค์์ ์คํ๋๋ฏ๋ก ์ธ์คํด์ค ๋ณ์๋ ๊ณต์ ๋ ์ ์๋ค.
ย ย - ํ ์คํธ ๊ฒ์ฆ์๋ Assert ํด๋์ค์ ์ ์๋ assert ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
ย ย - assert ๋ฉ์๋ ์ค ํ๋ผ๋ฏธํฐ 2๊ฐ๋ฅผ ๋ฐ๋ ์์๋ค์ ํญ์ ๊ฐ์ ํจํด(๊ธฐ๋๊ฒฐ๊ณผ๊ฐ,ํ ์คํธ๊ฐ)์ ๋ฐ๋ฅธ๋ค.
assert method | ๋ชฉ์ |
---|---|
assertArrayEquals("message", A, B) | ๋ฐฐ์ด A์ B๊ฐ ์ผ์นํจ์ ํ์ธ |
assertEquals("message", A, B) | ๊ฐ์ฒด A์ B๊ฐ ์ผ์นํจ์ ํ์ธ. B๋ฅผ ํ๋ผ๋ฏธํฐ๋ก A์ ๋ฉ์๋๋ฅผ ํธ์ถ(A.equals(B)) |
assertSame("message", A, B) | ๊ฐ์ฒด A์ B๊ฐ ๊ฐ์ ๊ฐ์ฒด์์ ํ์ธํ๋ค. Equals๋ ๊ฐ์ ํ์ธ ํ๋ค๋ฉด, Same์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋์ผ ๊ฐ์ฒด์ธ์ง ๋น๊ตํ๋ค.(๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋น๊ต) |
assertTrue( "message", A) | ์กฐ๊ฑด A๊ฐ ์ฐธ(TRUE)์์ ํ์ธ |
assertNotNull( "message", A) | ๊ฐ์ฒด A๊ฐ NULL์ด ์๋์ ํ์ธ |
ย ย - ํ ์คํธ ์ค์ํธ๋ ํน์ํ ํํ์ ํ ์คํธ ๋ฌ๋๋ก ์ฌ๋ฌ๊ฐ์ ํ ์คํธ ํด๋์ค๋ฅผ ๋์์ ์คํํ ๋ ์ฐ์ด๋ ๊ฐ์ฒด, ์ผ์ข ์ ํ ์คํธ ์งํฉ์ด๋ฉฐ ๋ณ๋๋ก ํ ์คํธ ์ค์ํธ๊ฐ ์ ์๋์ง ์์๋ค๋ฉด JUnit์ด ํ ์คํธ ํด๋์ค ๋ด ๋ชจ๋ ํ ์คํธ๋ค์ ํฌํจํ๋ ์ค์ํธ๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค.
ย ย - ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํ๋ ์ผ์ข ์ ์์ง
ํ๋ผ๋ฏธํฐํ(parameterized)๋ ๋ฒ์ 4, 5๊ฐ ์ฐจ์ด๊ฐ ์์ผ๋ฏ๋ก ๋ด์ฉ ์๋ต.
[##Image|kage@d4NgW8/btsBT0cU6No/CjL2w7RKejik2RBPiqSrGK/img.png|CDM|1.3|{"originWidth":778,"originHeight":1161,"style":"alignCenter"}##][##Image|kage@3Wvps/btsBXQmxtWm/PPM8NTlIiKcYAvgSCaPKDK/img.png|CDM|1.3|{"originWidth":793,"originHeight":816,"style":"alignCenter"}##][##Image|kage@bThn1w/btsBVGSglNP/ISCFKVqKBFksfrtVfkfn91/img.png|CDM|1.3|{"originWidth":896,"originHeight":1057,"style":"alignCenter","caption":"JUnit5 ParameterizedTest ์ค, MethodSource ์ ์ฉ ์์, MOCK MVC๋์ , Controller์์์ param ์์ ์์ฑ"}##]