๋ค์ ๋ฆ์ ํ๋ฆฌ์ฝ์ค 2์ฃผ ์ฐจ ํ๊ธฐ๋ฅผ ์ฌ๋ฆฝ๋๋ค! ํ์ฌ ์งํ ์ค์ธ ๋ฏธ์ ์ด ๊ฝค ๊ฑธ๋ฆฌ๋์ง๋ผ ์ด์ ์ผ ์ฌ๋ฆฌ๊ฒ ๋๋ค์ ๐ฅฒ
์ด๋ฒ ๋ฏธ์ ์ ํ๊ต ์ ๋ฐฐ ๋ถ๊ป ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ผ๋ฉฐ ๋ฏธ๋ฆฌ ํด ๋ณธ ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์ด์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ 1์ฃผ ์ฐจ ๋์ฒ๋ผ ํต์ฌ ๋ก์ง์ ์ฝ๊ฒ ์ดํด๋์์์ต๋๋ค.
JUnit5์ ๋ํด ๊น๊ฒ ํ๋ณด๊ฒ ๋จ (ParameterResolutionException)
์ด๋ฒ ๋ฏธ์ ์์๋ ์๊ตฌ์ฌํญ์ผ๋ก ํ ์คํธ๋ฅผ ํด ๋ณด๋ผ๋ ๊ฒ์ด ์์ ์๊ตฌ์ฌํญ์ ์ ์๋์ด ์์์ต๋๋ค. ๊ทธ๋์ ์ฐ์ํ ํ ํฌ์ฝ์ค์ ๋จ์ ํ ์คํธ ํ ์ฝํก ์์์ ๋ณด๋ฉฐ ์ ๋๋ก ํ ์คํธ๋ฅผ ์ตํ๋ณด๊ณ ์ถ์๊ณ , ์ด ๊ณผ์ ์์ @ParameterizedTest๋ฅผ ์ฐ๋ฉด ๊ฐ์ ํ ์คํธ์ด๋ฉด์ ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ ๊ฒฝ์ฐ๋ฅผ ์ถ์ฝํ ์ ์์์ ๋ฐฐ์ ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฐ์ฐํ @Test์ @ParameterizedTest๋ฅผ ํจ๊ป ์ฌ์ฉํ์๋๋ฐ, ์ด ๊ณผ์ ์์ ParameterResolutionException์ด๋ผ๋ ์์ธ๋ฅผ ์ ํ์ต๋๋ค. ์ด๋ค์ ํจ๊ป ์ฐ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์์ ์ฝ๊ฒ ์์์ง๋ง, ์ ์ ํํ ์ด๋ฌํ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒ์ธ์ง๋ฅผ ์๊ณ ์ถ์ด JUnit์ ๋ด๋ถ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํด ๋ณด๋ฉฐ ์์ธ์ ์ฐพ๊ณ ์ ํ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ @Test์ ๊ฒฝ์ฐ์์๋ @ParameterizedTest์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ String ํํ์ ์ธ์๊ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ ์ง์๋๋ ํ๋ผ๋ฏธํฐ ๋ฆฌ์กธ๋ฒ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ธ๊ฐ ๋ฐ์ํจ์ ์๊ฒ ๋์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์๋ฉด ๋ฉ๋๋ค!
๋ ์ฝ๋ ๋์
์ ๋ฒ ์ฃผ์ฐจ ๋ฏธ์ ์ธ ์ซ์ ์ผ๊ตฌ์์๋ DTO๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ ์์ ์์ฑํ์ง ์์์์ง๋ง, ์ด๋ฒ ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋งค๋ฒ ์๋์ฐจ์ ๊ฐ ํํฉ์ ๋ณด์ฌ์ฃผ์ด์ผ ํด์ DTO๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ค ์๋ฐ 17์ ํน์ง์ธ ๋ ์ฝ๋๋ ๋ฌด์์ธ์ง ๋ฌธ๋ ๊ถ๊ธ์ฆ์ด ๋ค์๊ณ , ๋ง์ ๊ฐ๋ ์ ์ ํ๋ ๊ธฐ์กด์ ์ง์ ์์ฑํ๋ DTO๋ฅผ ์ฝ๊ฒ ๋์ฒดํ ์ ์๊ฒ ๋ค๊ณ ํ๋จ๋์ด DTO ์ฝ๋๋ฅผ ๋ ์ฝ๋๋ก ๋ฐ๊ฟจ์ต๋๋ค. ์ด๋ ๋ฏ ์๋ฐ ๋ฒ์ ์ ๋ฐ๋ผ ์ง์ ๊ฐ๋ฅํ ๊ฐ๋ ๋ค์ด ์๊ธฐ์, ๊ทธ๋์ ์๋ฐ ๋ฒ์ ์ ๋ํด ํฌ๊ฒ ์ ๊ฒฝ ์ฐ์ง ์๋ ๊ฒ ์ผ๋ง๋ ์ข์ง ์์์ง๋ฅผ ๋๊ผ๊ณ ์์ผ๋ก๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ๋๋ ๋ฒ์ ์ ๋ฐ๋ผ์ ์ด๋ค ๊ฒ๋ค์ ์ธ ์ ์์์ง ๋ฏธ๋ฆฌ ์กฐ์ฌํด ๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค. ๋ ์ฝ๋์ ๋ํ ๊ธ์ ์ด ๊ธ์ ์ฐธ๊ณ ํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
JUnit์ Assertions ๋ฉ์๋์ ๋ํด ๋ ์๊ฒ ๋จ
์ซ์ ์ผ๊ตฌ ๋ฏธ์ ์์๋ ํ ์คํธ ์ฝ๋ ์์ฑ ์, ์์ธ ๋ฐ์๊ณผ ์ ์ ์ฝ๋๋ฅผ ์๋์ฒ๋ผ ์์ฑํ์์ต๋๋ค.
@Test
void ํ๋ ์ด_์ซ์๋_์ค๋ณต๋๋ฉด_์๋๋ค() {
// given & when
Throwable exception = Assertions.assertThrows(IllegalArgumentException.class, () -> {
PlayNumber playNumber = PlayNumber.from("111");
});
// then
assertThat(exception.getMessage()).isEqualTo(PLAY_NUMBER_DUPLICATE_EXCEPTION.toString());
}
@Test
void ์ธ์๋ฆฌ_๋ชจ๋_์ ์์ด๋ผ๋ฉด_๋ฌธ์ ์์ด_์์ฑ๋๋ค() {
PlayNumber playNumber = PlayNumber.from("123");
}
Assertions ๋ฉ์๋๋ค์ ๋ ์ฐพ์๋ณด๋, ๋ค์๊ณผ ๊ฐ์ ์ ์ ํ ๋ฉ์๋๋ค์ ์ฐพ์ ์ ์์์ต๋๋ค.
- org.assertj.core.api.Assertions.assertThatThrownBy: ํน์ ์์ธ๊ฐ ๋ฐ์ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์์ธ ๋ฉ์์ง๊ฐ ํน์ ๋ฉ์์ง๊ฐ ๋ง๋์ง ๋ฑ์ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
- org.junit.jupiter.api.Assertions.assertDoesNotThrow: ์์ธ๊ฐ ํฐ์ง์ง ์๊ณ ์ ์์ ์ผ๋ก ์งํ์ด ๋๋์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ดํ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ฉํ์์ต๋๋ค.
@Test
@DisplayName("์ด๋ฆ์ด ๋ชจ๋ ๋
๋ฆฝ์ ์ด๋ฉด ์ ์ ์์ฑ๋๋ค.")
void splitNamesTest() {
// when & then
assertDoesNotThrow(() -> Names.from("john,bob,alice"));
}
@Test
@DisplayName("๊ฐ์ ์ด๋ฆ์ด ๋ฐ๊ฒฌ๋๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค.")
void duplicateNamesExceptionTest() {
// when & then
assertThatThrownBy(() -> Names.from("john,john,bob")).isInstanceOf(IllegalArgumentException.class)
.hasMessage(DUPLICATE_NAME_EXCEPTION.getMessage());
}
- assertDoesNotThrow๋ฅผ ํตํด ํ์คํ ์ ์์ ์ผ๋ก ์คํ์ด ๋๋์ง ๊ฒ์ฆ์ ์๋ฏธ๋ฅผ ์ ๋ฌํ ์ ์๊ฒ ๋์์ต๋๋ค.
- assertThatThrownBy๋ฅผ ํตํด ๊ฒ์ฆ ๊ณผ์ ์ ํ ๋ฒ์ ํํํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ด๋ ๊ฒ Assertions์์ ์ ๊ณตํ๋ ๋ฉ์๋๋ค์ ํ์ฉํ๋ ๋ ์ง๊ด์ ์ด๊ณ ๊ฒ์ฆ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์์ด ํ ์ธต ๋ ์ข์์ง ์ฝ๋์์ ๋๊ผ์ต๋๋ค.
Assertions์ ๊ดํด์๋ ๋ค๋ฅธ ๊ธ์์ ๋ ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ชจํธํ ์๊ตฌ์ฌํญ์ ๋ํ ๊ณ ๋ฏผ
์ฝ์น์์ ์๋ค ํ์ (์ฝ์ํ) ๋ ์ด๋ฐ ๋ง์์ ํด์ฃผ์ จ์ต๋๋ค.
์ค์ ๋ก ๊ฐ๋ฐ์ ํฌ์ ๋๋ฉด ์ฌํ ๊ฒฝ์ฐ์๋ ๊ธฐํ๊ณผ ๊ฐ๋ฐ์ด ๋์์ ์ผ์ด๋๊ธฐ๋ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ๊น์น๋ณถ์๋ฐฅ์ ์๋ฆฌํ ๋ ๊น์น๋ฅผ ์ ํํ ์ผ๋ง๋, ๊ณ ์ถง๊ฐ๋ฃจ๋ฅผ ์ ํํ ์ผ๋ง๋ ๋ฃ์์ง๋ ๊ณ ๋ คํ์ง ์๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๋ํด์๋ ์ฐ์ตํด ๋ณด๊ธธ ๊ถํ๋ค.
์ ๋ง์์ฒ๋ผ, ๊ทธ๋์ ์งํํ๋ ํ๋ก์ ํธ๋ค์์๋ ์ด๋ ๊ฒ ๊ธฐํ๊ณผ ๋์์ ๊ฐ๋ฐ์ ํด์ผ ํ๋ ์ ์ด ์๊ณค ํ์์ต๋๋ค.
์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์ ๊ฒฝ์ฐ์๋ ์๋์ฐจ์ ์ด๋ฆ์ ์ ๋ ฅ๋ฐ์ ๋ 5์ ์ดํ์ธ ๊ฒ๋ง ์กฐ๊ฑด์ผ๋ก ๋์ด ์์ด์, ๊ณต๋ฐฑ์ด ํฌํจ๋ผ๋ ๋๋์ง, ์ซ์๊ฐ ๋ค์ด๊ฐ๋ ๋๋์ง์ ๊ฐ์ ์ธ๋ถ์ ์ธ ์์ธ์ฌํญ์ ๋ํด์๋ ๊ธฐ์ ํด๋์ง ์์์ต๋๋ค. ๊ทธ๋์ ์์ ํ์ฌ์์ ์ค์ ๋ก ์ด ๋ฏธ์ ์ ๊ฐ๋ฐํด์ผ ํ๋ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ์ด๋ฌํ ๋ ผ์๋ค์ด ์ด๋ฏธ ์งํ๋๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ ๋๋ฆ์ ๊ธฐ์ค์ ์ธ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด ๋์์ต๋๋ค.
ํ๋ฆฌ์ฝ์ค๋ ๊ทธ๋ ๊ณ ์ค์ ๊ฐ๋ฐ๋ ๊ทธ๋ ๊ณ ์๊ฐ์ด ์ง๋ ์๋ก, ๋๋ ๋๋ก๋ ์ด๋ ๊ฒ ๋ชจํธํ ์๊ตฌ์ฌํญ๋ค์ด ๋ ๋ง์ ๊ฒ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ์ ์์ ์ด๋ฌํ ๊ณ ๋ฏผ์ ๋ฏธ๋ฆฌ ํด ๋ณผ ์ ์์๋ค๋ ์ ์์, ๋ง์ ๊ฒ์ ๋ฐฐ์ด ๊ฒ ๊ฐ์ต๋๋ค.
๊ฒฐ๋ก
์ ๋ฒ ์ฃผ์ฐจ์๋ ๊ตฌ์กฐ์ ์ธ ๊ฒ์ ๋ํด ๊ณ ๋ฏผ์ ํ์๋ค๋ฉด, ์ด๋ฒ ์ฃผ์๋ ๊ธฐ์ ์ ๊ดํด ๊ณ ๋ฏผ์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค์ ํ๋ฆฌ์ฝ์ค ๋ฏธ์ ์์๋ ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ธ ์ ์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค ๐
์ต์ข ์ ์ถ
์ด๊ณณ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.