์ค๋ ๋ถ์ํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค. ์๋ ์ฝ๋์ ์ ํํ ์๋ฆฌ๊ฐ ๊ถ๊ธํด์ assertThrows์ ๋ํด ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค. assertThrows๋ JUnit์์ ์ ๊ณตํ๋ ํ ์คํธ ๋ฉ์๋ ์ค์ ํ๋์ด๋ค.
//memberService.join(member2)ํ๋ฉด IllegalStateException์ด ์ผ์ด๋์ผํ๋ค๋ ๋ป
IllegalStateException e= Assertions.assertThrows(IllegalStateException.class,
()->memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.");
์ผ๋จ JUnit์์ ์ ๊ณตํด์ฃผ๋ ๋ฉ์๋๋ผ๊ณ ํ๋ JUnit์ด ์ด๋ค ํ๋ ์์ํฌ์ธ์ง๋ง ์์ฃผ์์ฃผ ์งง๊ฒ ์ ๋ฆฌํด๋ณด๋๋ก ํ์.
JUnit์ด๋?
Java์์ ๋ ๋ฆฝ๋ ๋จ์ํ ์คํธ (Unit test)๋ฅผ ์ง์ํด์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค.
๊ทธ๋ผ ๋จ์ ํ ์คํธ๋?
ํน์ ์์ค์ฝ๋์ ๋ชจ๋์ด ์๋ํ ๋๋ก ์๋ํ๋์ง ๊ฒ์ฆํ๋ ํ ์คํธ์ด๋ค. ์ฆ ํจ์ ๋ฐ ๋ฉ์๋์ ๋ํด ํ ์คํธํ ์ ์๋ค.
๊ฐ๋จํ ๋งํด์ ๋ด๊ฐ ์ด๋ค ๋ฉ์๋๋ฅผ ์ ์ํ๋ค๊ณ ๊ฐ์ ํ์. ๊ทธ๋ ๊ทธ ๋ฉ์๋๊ฐ ์ ๋ง ์ ๋์ํ๋์ง ํ ์คํธํด๋ณด๊ณ ์ถ์ ์ ์๋ค. ๊ทธ๋ Junit์ @Test๋ฅผ ์ด์ฉํด์ ํจ์(ํน์ ๋ฉ์๋) ํ๋์ฉ๋ง์ ํ ์คํธํด๋ณผ ์ ์๋ค. ์ด์ ๋ํด์๋ ๋ค์์ ๋ค์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
assertThrows()
static <T extends Throwable>T assertThrows(Class<T> expectedType, Executable executable)
์ด ๋ฉ์๋๋ ์ธ์๋ก ์์๋๋ exception๊ณผ ์คํ๋ ๋์(Executable)์ ์ธ์๋ก ๋ฐ๋๋ค.
๋ฐ์ ๋์(Executable)์ ์คํํ ํ ๋ฐ์ํ๋ exception์ด ์ธ์๋ก ๋ฐ์๋ exception๊ณผ ๋์ผํ๋ฉด ํด๋น exception์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค. ์ฐ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
๋์ถฉ ์์ฌ ์ฝ๋๋ก ์ ๋ฆฌํด๋ณด์๋๋ฐ ์ด๋ฐ ์์ผ๋ก ์๋ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
private static <T extends Throwable> T assertThrows((Class<T> expectedType, Executable executable, Object messageOrSupplier) {
try{
executable ์คํ}
//์์ธ๋ฐ์
catch(์์ธ){
if (๋ฐ์ํ ์์ธ == ์ธ์๋ก ๋ฐ์ ์์ธ)
{
return ๋ฐ์ํ ์์ธ
}
else {
throw ๋ค๋ฅธ ์์ธ
}
//์์ธ ์ ๋ฐ์ํ ๊ฒฝ์ฐ
throw (์์ธ ์๋ฐ์ํ๋ค๋ ์์ธ)
}
๊ทธ๋ผ ๋ค์ ์ฝ๋๋ฅผ ๋ถ์ํด๋ณด์
//memberService.join(member2)ํ๋ฉด IllegalStateException์ด ์ผ์ด๋์ผํ๋ค๋ ๋ป
IllegalStateException e= Assertions.assertThrows(IllegalStateException.class,
()->memberService.join(member2));
IllegalStateException ์์ธ๊ฐ ๋ํ๋ ๊ฒ์ด๋ผ๊ณ ์์ํ๊ณ ์ธ์๋ก ๋๊ฒจ์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ memberService.join(member2)๋ฅผ ํ๋๋ก ํ๋ค. ์ฐธ๊ณ ๋ก Executable ์ธ์๋ฅผ ๋๊ธธ ๋๋ ์ ๋ฐ์์ผ๋ก ๋ณดํต ๋๋ค์์ผ๋ก ๋๊ธด๋ค! ( ๋๋ค์์์๋ ์ธ์ ์์ผ๋ฉด ()->์ด์ฉ๊ตฌ ํํ๋ก ์)
์๋ฌดํผ ์ ๋ฉ์๋๋ฅผ ๋๋ ธ๊ณ ๋ด๋ถ์์ ์ค์ ๋ก IllegalStateException์ด ์ผ์ด๋ฌ๋ค๋ฉด ๋ฉ์๋๋ IllegalStateException๋ฅผ returnํ ๊ฒ์ด๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ค๋ฅธ exception์ returnํ ๊ฒ์ด๋ค. ์ด๋ ๊ทธ exception์ e์ ๋์ ํ๋ค.
์ดํ e๋ฅผ ์ด๋ค ์์ผ๋ก ์ฒ๋ฆฌํ๋๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
assertThat(e.getMessage()).isEqualTo("์ด๋ฏธ ์กด์ฌํ๋ ํ์์
๋๋ค.");
e์ ์๋ฌ๋ฉ์์ง๊ฐ "์ด๋ฏธ ์กด์ฌํ๋ ํ์์ ๋๋ค"์ ๊ฐ์ผ๋ฉด e๊ฐ IllegalStateException์ด๋ผ๊ณ ํ๋จํ๊ณ ํ ์คํธ๋ ์ฑ๊ณตํ๊ฒ ๋๋ค. ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ ์์ ์ IllegalStateException์ด ์ผ์ด๋๋ฉด ์ ๋ฐ ์๋ฌ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํ๋๋ก ํด์คฌ๊ธฐ ๋๋ฌธ์ด๋ค. (์ฌ๊ธฐ ์ฐธ๊ณ )
์ ๋ฆฌ
์์ธ ๊ฐ์ฒด e = assertThrows(์์๋๋ ์์ธ,์คํํ ์ก์ );
์์๋๋ ์์ธ์ ํน์ฑ๊ณผ e์ ํน์ฑ ๋น๊ต (์์์๋ ์๋ฌ๋ฉ์์ง ๋น๊ตํ์์) ํด์ ๊ฒ์ฆ
References