์ข์ ๊ธฐ๋ฅ์ BiMatcher
๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋์
ํ๋ ๊ฒ์
๋๋ค( org.hamcrest.Matcher
์ ์ ์ฌํ์ง๋ง 2๊ฐ์ ์ธ์๋ฅผ ์ฌ์ฉํจ). ๋๋ ํ์ค Comparator
๋ฅผ ์ด ์ฉ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ BiPredicate
์ฌ์ฉํ ์ ์์ต๋๋ค(JUnit์ Java-8์ ์ฐ๊ฒฐํ์ง๋ง ๊ธฐ๋ณธ AND/OR/NOT ๋
ผ๋ฆฌ๋ฅผ ์ถ๊ฐํจ).
๋ชจ๋ ์ถ๊ฐ ์ฝ๋์ ๋ํ ๋ช ๊ฐ์ง ์ฐธ๊ณ ์ฌํญ:
BiMatcher
, BiPredicate
๋ฐ Comparator
์ด๋ฆ์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋ฉ๋๋ค.Assert
ํด๋์ค์ ์ถ๊ฐํ ์ฃผ์ ๋ฉ์๋:
assertThat(T expected, T actual, Comparator<T> biMatcher);
assertThat(String message, T expected, T actual, Comparator<T> biMatcher);
(ํ์ํ์ง ์์ ์๋ ์์, ์๋ ์ฐธ์กฐ).assertArray()
๋ฉ์๋(์๋ ์ฐธ์กฐ).๋๊ธฐ: ๋๋ก ๊ฐ์ฒด ๋ฐฐ์น์ ๋ํด ์ ์ฌํ ๊ฒ์ฌ๋ฅผ ๋ง์ด ์ํํด์ผ ํฉ๋๋ค. ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ด๋ฅผ ํ์ฉํ์ง๋ง ๋ง์ ์ถ๊ฐ ์ฝ๋(๋ฃจํ ๋ฐ ์กฐ๊ฑด)๊ฐ ์์ต๋๋ค. Comparator
ํ๋ฉด ๋ ์ ์ ์ฝ๋๋ก ๋ ๋์ ์ ์ฐ์ฑ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
์ค์ ์ (์ด ๊ธฐ๋ฅ์ ๋ํด ์ค์ ๋ก ์๊ฐํ๊ธฐ ์์ํจ): ๋ฐฐ์ด์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ๊ฑฐ๋ ๋์ผํ์ง ์์์ง ํ ์คํธํด์ผ ํฉ๋๋ค(๋ถ์ธ ํ๋๊ทธ์ ๋ฐ๋ผ ๋ค๋ฆ).
ํ์ฌ JUnit ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์
๋๋ค.
๋ ์งง์:
for (int i = 0; i < elements.length - 1; i++) {
if (checkSame) { // Same
assertSame("elements must be the same.", elements[i], elements[i + 1]);
} else { // Not same
assertNotSame("elements must be not the same.", elements[i], elements[i + 1]);
}
}
๋ ๋์ ์ฑ๋ฅ(๊ทธ๋ฌ๋ ๋๊ฐ ํ ์คํธ์์ ์ฑ๋ฅ์ ๊ด์ฌ์ด ์๋์ง):
if (checkSame) { // Same
for (int i = 0; i < elements.length - 1; i++) {
assertSame("elements must be the same.", elements[i], elements[i + 1]);
}
else { // Not same
for (int i = 0; i < elements.length - 1; i++) {
assertNotSame("elements must be not the same.", elements[i], elements[i + 1]);
}
}
๋ํ ์ฐ๋ฆฌ๋ ์์ ์ ๊ตฌํํ ์ Comparator
์ฌ์ฉํ assertTrue()/assertFalse()
(์ฐ๋ฆฌ๋ ๋๋ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ), ๊ทธ๋ฌ๋ ์์ฑ ๋น๊ต๊ธฐ์ ์ฝ๋๋ ํฐ ๊ฒ์
๋๋ค.
์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๊ฐ ํจ์ฌ ๋ ์งง๊ณ ๊น๋ํ๊ฒ ๋ณด์ผ ๊ฒ์ ๋๋ค.
Comparator<T> comparator = checkSame ? BiMatchers.same() : BiMatchers.notSame();
String message = checkSame ? "elements must be the same." : "elements must be not the same.";
for (int i = 0; i < elements.length - 1; i++) {
assertThat(message, elements[i], elements[i + 1], comparator);
}
๋ ์งง๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ ํ์ message
์์ฑ์ ์ฌ์ฉํ์ฌ Comparator
๋ฅผ MessagedComparator
๋ก ํ์ฅํ ์ ์์ผ๋ฏ๋ก JUnit์ด ์ด๋ป๊ฒ๋ ๊ฑฐ๊ธฐ์์ ๊ฐ์ ธ์ต๋๋ค. ์ด์ ๊ฐ์ด:
MessagedComparator<T> comparator = checkSame ? BiMatchers.same("elements must be the same.") : BiMatchers.notSame("elements must be not the same.");
for (int i = 0; i < elements.length - 1; i++) {
assertThat(message, elements[i], elements[i + 1], comparator);
}
๊ฒฐ๊ณผ๋ ๋งค์ฐ ๊ด๋ฒ์ํฉ๋๋ค.
1) Assert
ํด๋์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ ์ฐํฉ๋๋ค. ๋ง์ ์ฝ๋ ์์ด ํ์ค ๋๋ ์์ฒด ๋น๊ต๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
2) ์ด์ ์ ๊ฒฐ๊ณผ๋ก ๋๋ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์กฐ๊ฑด์ ๋ ์ฝ๊ฒ ์ฃผ์
ํ ์ ์์ต๋๋ค.
3) ์ถ๊ฐ ๋ก์ง ์บ์ค์ผ์ด๋ฉ(AND, OR, NOT)์ ์ฆ์ ์ถ๊ฐํ ์ ์์ต๋๋ค( org.hamcrest.CoreMatchers
์ ์ ์ฌ). ํ์ฌ ์๋ก์ด ๋ฏธ๋ ๊ธฐ๋ฅ์ ๋ํด ์๋ก์ด ๋ฉ์๋๊ฐ ํ์ํฉ๋๋ค(์: assertNotSame()
์์ assertSame()
. ์๋๋ฉด ๋ค์ assertTrue()/assertFalse()
๋ฉ์๋๊ฐ ํ์ํฉ๋๋ค.
4) Assert
ํด๋์ค ์ ์ฒด๋ฅผ ํต์ผ๋ ํํ๋ก ๋ฆฌํฉํ ๋งํ ์ ์์ต๋๋ค. ํ ๊ฐ์ง ์:
public static void assertSame(String message, Object expected, Object actual) {
assertThat(message, expected, actual, BiMatchers.same())
}
public static void assertThat(String message, T expected, T actual, Comparator<T> biMatcher) {
...
}
๋๋ ์ด๋ฏธ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด:
public static void assertSame(String message, Object expected, Object actual) {
assertThat(expected, actual, BiMatchers.same(message))
}
public static void assertThat(T expected, T actual, MessagedComparator<T> biMatcher) {
...
}
5) assertArray()
๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค(๋ฐ๋ผ์ ์ด์ ๋ฉ์๋๋ ๋ฆฌํฉํ ๋ง๋จ). ์:
public static void assertArrayEquals(boolean[] expecteds, boolean[] actuals) {
assertArray(expecteds, actuals, BiMatchers.equals());
}
public static void assertArray(boolean[] expecteds, boolean[] actuals, Comparator<Boolean>) {
...
}
๋ฐ๋ผ์ ์๋ฅผ ๋ค์ด 2๊ฐ์ ๋ฐฐ์ด์ ์๋ ๋ชจ๋ ์์๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ด์ง ํ์ธํ ์ ์์ต๋๋ค.
Assert.assertArray(array1, array2, BiMatchers.same());
๋ํ ๋ฐฐ์ด ๊ธธ์ด ๋๋ ๊ธฐํ ๊ฒ์ฌ๋ฅผ ๋ณ๋๋ก ์ ์ดํ ์ ์์ต๋๋ค. ์์ฌ ์ฝ๋:
Assert.assertArray(array1, array2, and(sameLength(), same()));
์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
JUnit 4.x๊ฐ ๋ ๋ง์ ์ด์ค์ DSL์ ์ถ๊ฐํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. DSL์ ์ ํํ๊ณ ์ ์ฐํ๊ฒ ๋ง๋๋ ๊ฒ์ ์ ๋ง ์ด๋ ต์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Truth ๋๋ Fest์ ๊ฐ์ ํ๋ฅญํ ํ์ฌ ์ฃผ์ฅ ํ๋ ์์ํฌ๊ฐ ์๋ ๊ฒฝ์ฐ JUnit์์ ์ด์ ๋ํด ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ํฌ์ํ๋ ๊ฒ์ด ์ด์น์ ๋ง๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ํ Java 8์ด ํ์ํ ๊ธฐ๋ฅ์ http://github.com/junit-team/junit5 ๋ก ์ด๋ํด์ผ ํฉ๋๋ค.
@gitIvanB ๋ฌธ์ ๋ฅผ ์ด์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. @kcooney ์ ๋ง์ฐฌ๊ฐ์ง๋ก
@kcooney , @marcphilipp , ํํธ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ฃผ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฌ๊ธฐ์์ ๋ชจ๋ฒ ์ฌ๋ก์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ถ๊ฐ ์ง๋ฌธ ํ๋. ๊ฒฝํ์ Assert
์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ๊ถ์ฅ๋์ง ์๋ ๊ฒ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๊น? ํนํ JUnit-4์์ JUnit-5๋ก์ ํฅํ ์
๊ทธ๋ ์ด๋ ๊ฐ๋ฅ์ฑ์ ์ผ๋์ ๋์ญ์์ค.
@gitIvanB ์ง๋ฌธ์ด ์ฝ๊ฐ ๋ช
ํํ์ง ์์ต๋๋ค. junit4์ ๋ํด ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ org.junit.Assert
๋ฅผ ์ฌ์ฉํ๊ณ junit5์ ๋ํด ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ org.junit.jupiter.api.Assertions
๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ ๋ชจ๋ ์ค์ Assert.
๊ฐ ํฌํจ๋์ง ์๋๋ก ๋ฉ์๋๋ฅผ ์ ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์
๋๋ค.
@gitIvanB ํ์คํ junit.framework.Assert
์ฌ์ฉํด์๋ ์ ๋์ง๋ง org.junit.Assert
๋ ๊ด์ฐฎ์ต๋๋ค. ์
๊ทธ๋ ์ด๋ํ ๋ IDE๋ฅผ ์ฌ์ฉํ์ฌ JUnit 4๋ฅผ JUnit Jupiter ์ด์ค์
์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค(IDEA์์ ์ด๋ฏธ ์ง์). ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ ํ์ ๋ฉ์์ง ๋งค๊ฐ๋ณ์๊ฐ JUnit 4์์๋ ์ฒ์์ด์ง๋ง Jupiter์์๋ ๋ง์ง๋ง์ ์จ๋ค๋ ๊ฒ์
๋๋ค. ๋๋ ์ง๊ธ ๋ค๋ฅธ ์ด์ค์
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ Vintage์์ Jupiter๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ ๋ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@panchenko , @marcphilipp ๊ทธ๋์ JUnit-4์ org.junit.Assert
๊ฐ ๋ด์ธ๋์ด ์๊ณ ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ณด๊ฐ๋์ง ์์ ๊ฒ์์ ์ดํดํ์ต๋๋ค. JUnit-5์์๋ org.junit.jupiter.api.Assertions
( org.junit.Assert
๋์ฒด) ๋๋ ์ผ๋ถ assertion lib๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
JUnit-5๋ฅผ ๋ฐฐ์ฐ๋ ค๋ฉด ์๊ฐ์ด ํ์ํ์ง๋ง org.junit.jupiter.api.Assertions
์ธ๋ป ๋ณด๊ธฐ์ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ org.junit.Assert
์ ๋น์ทํฉ๋๋ค. ๋ฐ๋ผ์ JUnit-5์ ๋ํ ์ ์ฌํ ํฐ์ผ์ ์์ฑํด์ผ ํ ํฐ ๊ธฐํ์
๋๋ค. :) ์ ๋ JUnit-5๊ฐ ๋ณธ๊ฒฉ์ ์ธ ์ฃผ์ฅ์ ์ ๊ณตํ๊ฑฐ๋ ์ฃผ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ ํ ์์ํด์ผ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค.
@gitIvanB JUnit์ ์ฒ ํ์ Java์์ Java ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ๋ฅญํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ํ์ฅ ๊ฐ๋ฅํ ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์คํ ์์ค ํ๋ก์ ํธ๊ฐ ํ๋ ์์ํฌ๋ฅผ ํ์ฅํ๊ฑฐ๋ JUnit๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ํ๋ถํ ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ข ์ข ๋ด ๋๋ค.
์ด์ค์
์ ๊ฒฝ์ฐ ๋๋ก๋ ํ์ฅ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๋ณด๋ค ํ๋ถํ ์ด์ค์
์ธํธ๋ฅผ ์ ๊ณตํ๋ ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด Google Truth(https://github.com/google/truth), FEST(https://github.com/alexruiz/fest-assert-2.x), AssertJ(http://joel- costigliola.github.io/assertj/) ๋ฐ Hamcrest(http://hamcrest.org/JavaHamcrest/).
๋๋ผ์ด ์ฃผ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ org.junit.Assert
๋ํ ์๋ก์ด ๊ธฐ๋ฅ ์์ฒญ์ ์๋ฝํ๋ ๊ฒ์ ๊บผ๋ คํ์ต๋๋ค. ๋๊ฒฐ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค( junit.framework.Assert
๋๊ฒฐ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ง๋ง). ์ฌ์ค, 4.13์ assertThrows
๋์
ํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด๋ฌํ ํ๋ก์ ํธ๋งํผ ํ๋ถํ ์ฃผ์ฅ ์ธํธ๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ์ฌํญ์ ์ ๊ณตํ๋ ๊ฒ์ด ํธ์ํ๋ค๊ณ ๋๋๋๋ค.
๋ค์ ๋งํด, ์ด๋ฌํ ํ๋ก์ ํธ์ ์ฌ์ฉ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฑด์ ํ ์ปค๋ฎค๋ํฐ๊ฐ ํ์ฑ๋์์ผ๋ฏ๋ก ์ด๋ฅผ ์์ฉํ๊ณ ์ง์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
JUnit5์ ๋ํด ๋งํ ์๋ ์์ง๋ง ์๋ ๊ฐ๋ฐ์๋ ์ฃผ์ฅ ๋ฐฉ๋ฒ์ ์ข์ ๊ธฐ์ด ์์ด๋ ์ฐจ์ธ๋ JUnit์ ์ถ์ํ ์ ์๋ค๊ณ ๋๊ผ์ ๊ฒ์ด๋ผ๊ณ ์์ํฉ๋๋ค. ์ธ๋ จ๋ ๊ฒ์ JUnit5๋ฅผ ์ฌ์ฉํ์ฌ JUnit5๋ฅผ ํ ์คํธํ๋ ๊ฒ์ด์์ต๋๋ค). ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ธํด ๊ธฐ๋ณธ ์ด์ค์ API๊ฐ Kent, Erich ๋ฐ David๊ฐ ํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ๊ฒฐ์ ์ ๋ด๋ ธ์ผ๋ฏ๋ก ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ JUnit์์ Hamcrest๋ Truth์ ๊ฐ์ ํ์ฅ ๊ฐ๋ฅํ DSL์ฒ๋ผ ํ๋ถํ ์ฃผ์ฅ ์งํฉ์ ๊ฒฐ์ฝ ๋ณผ ์ ์์ ๊ฒ์ ๋๋ค.
์ด๋ค ์ ํ์ ๋ณ๊ฒฝ์ ๊ณ ๋ คํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ ๊ฒ์ JUnit5 ํ์ ๋งก๊น๋๋ค. ๋ผ๋ ์๊ฐ์ด ๊ฐํ๊ฒ ๋ ๋ค๋ฉด
๋น์ ์ด ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ข์ ํ
์คํธ๋ฅผ ์์ฑํ๋ ๊ธฐ์ด๋ก ์ค์ํ๋ฏ๋ก ๊ฑฐ๊ธฐ์์ ์์ ๋กญ๊ฒ ๋ฌธ์ ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
JUnit 5(๋น์ ์ฝ๋๋ช "JUnit Lambda")์ ๋ํ ์์ ์ ์์ํ ๋ ์ฐ๋ฆฌ๋ ๋ฌ์ฑํ๊ณ ์ ํ๋ ๋ฒ์์ ๋ํด ๋ ผ์ํ์ต๋๋ค. ์๋ก์ด ์ข ๋ฅ์ Assertion ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ๋ฒ์์ ํฌํจ๋์ง ์๊ธฐ๋ก ๊ฒฐ์ ๋์์ต๋๋ค.
๋๋ JUnit 5 ์ฌ์ฉ์ ๊ฐ์ด๋์์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํฉ๋๋ค.
JUnit Jupiter์์ ์ ๊ณตํ๋ ์ด์ค์ ๊ธฐ๋ฅ์ ๋ง์ ํ ์คํธ ์๋๋ฆฌ์ค์ ์ถฉ๋ถํ์ง๋ง ๋ ๋ง์ ์ฑ๋ฅ๊ณผ ๋งค์ฒ์ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ํ์ํ๊ฑฐ๋ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ JUnit ํ์ AssertJ, Hamcrest, Truth ๋ฑ๊ณผ ๊ฐ์ ํ์ฌ ์ฃผ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ์ ํํ ์ฃผ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ณ ์ ๋์ง๋ ์์์ง๋ง ๋ชฉํ๋ JUnit 4์์์ ์ ์ฌํฉ๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ์์ํ ์ ์๋๋ก ๊ธฐ๋ณธ ์ด์ค์ ์ธํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์์ฒด ๋จ์ ํ ์คํธ๋ฅผ ์ํด AssertJ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.