````
๋
ธ๋ ฅํ๋ค
{
Assert.True(๊ฑฐ์ง, "์ค๋ฅ ๋ฉ์์ง");
}
catch(AssertionException e)
{
Trace.WriteLine("๋ฌด์ํฉ๋๋ค.");
}
Trace.WriteLine("Test Passed");
````
Nunit 3.9.0์์ ์ด ํ ์คํธ๋ ์ฑ๊ณต์ ์ด๋ฉฐ Visual Studio ํ ์คํธ ํ์๊ธฐ์์ ์คํํ ๋ ํ ์คํธ ํ์๊ธฐ์์ ํต๊ณผ๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. Nunit 3.10์์ ํ ์คํธ ์ผ์ด์ค๋ ํ ์คํธ ํ์๊ธฐ ๊ฐ์์์ ์คํจํ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. ๋ง์ง๋ง ์ถ์ ๋ผ์ธ์ ๋ ๋ฒ์ ๋ชจ๋์์ ์คํ๋ฉ๋๋ค.
๊ทํ์ ํ ์คํธ๋ NUnit์ ์๋ ๋ฐฉ์์ ๋ํ ๋ ๊ฐ์ง ์ ์์ ํ ์คํธํ๊ณ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์ฅ์ ๋๋ถ๋ถ ์ฌ์ค์ด์ง๋ง ์ฌ๋ฌ ์ฃผ์ฅ ๋ธ๋ก ๋ด์์ ๋๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ ๋ ์ ์ง๋์ง ์์ต๋๋ค. ๋ ๋ฒ์งธ๋ ์ ํ ์ฌ์ค์ด ์๋๋๋ค. ์์ธ๋ฅผ ์ก์ ๋๊น์ง๋ ์ด๋ฏธ ์คํจ๊ฐ ๊ธฐ๋ก๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ NUnit์ ๋ด๋ถ ๋์์ ๋ณ๊ฒฝ์ผ๋ก, ์ด๋ฌํ ์์ธ๋ฅผ ํฌ์ฐฉํ๋ ๊ฒฝ์ฐ์๋ง ๊ด์ฐฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ ์ฌ๋๋ค์๊ฒ ๋ช ๋ ๋์ ๊ทธ๋ฌํ ํ๋์ ์์กดํ์ง ๋ง๋ผ๊ณ ๋งํ์ต๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ์ ๋จ์ง ๊ตฌํ์ ์ฐ์ฐ์ ๋ถ๊ณผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทํ์ ์ํ ์ฝ๋๋ ๊ทํ๊ฐ ๋ณด๊ณ ์๋ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํ ๊ฒ์ผ ๋ฟ์ ๋๋ค. ์์ธ๋ฅผ ์ก๊ธฐ ์ํด ์ค์ ๋ก ์ํํ๋ ค๋ ์์ ์ ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น? ๋ ๋์ ์๋ฃจ์ ์ ์ฐพ๋ ๋ฐ ๋์์ ๋๋ฆด ์ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
์ด๋ ๊ฒ ์งง์ ์๊ฐ์ ๋ค์ ์ฐ๋ฝํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ํฉ์ด ์์ง ๋ถ์์ ํ ๋ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๋๋๋ก ์ํํธ์จ์ด๊ฐ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ๋ฐ์์๊ฒ ๋ณด๊ณ ํฉ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด ๋ถ์์ ํ ๋์์ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ํ์ฅํ์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฌธ์ ์์ ์คํจํ๋ ๋์ ํ ์คํธ๊ฐ ํต๊ณผํฉ๋๋ค.
์ด๋ฅผ ์ํด Warn.If() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ณด์์ง๋ง ํ ์คํธ ํ์๊ธฐ์์ ๊ฒฐ๊ณผ๊ฐ "Test Skipped"๋ก ์ค์ ๋ฉ๋๋ค. ํ ์คํธ๋ฅผ ์ ํ ๊ฑด๋๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๋ณด๊ณ ์คํจ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋์ ์ด์ค์ catch๋ฅผ ๊ตฌํํ๊ณ ๊ฒฝ๊ณ ๋ฅผ ์ถ์ ํ๋๋ก ์ ํํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ฐ๋์งํ์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ฝค ์ ์๋ํ์ต๋๋ค. ์ ์ด๋ ๋ง์ง๋ง ์ ๋ฐ์ดํธ๊น์ง๋.
์ด ๋ณ๊ฒฝ์ด ์๋์ ์ธ ๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ๋ณ๊ฒฝํด์ผ ํจ์ ์๋๋ค.
Warn.If
์ ์๋ํฉ๋๋ค ... ํ
์คํธ ํ์๊ธฐ์์ __except__. ๐ข ๋ฌธ์ ๋ ํ
์คํธ ํ์๊ธฐ๊ฐ ํฉ๊ฒฉ๊ณผ ๋ถํฉ๊ฒฉ์ ์์ง๋ง ๊ฒฝ๊ณ ๋ ๋ชจ๋ฅธ๋ค๋ ๊ฒ์
๋๋ค. ๊ฒฝ๊ณ ๊ฒฐ๊ณผ ์ํ๋ฅผ ๊ตฌํํ ๋๊น์ง ๊ฒฝ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ดํดํ ์ ์๋ ๊ฒ์ผ๋ก ๋ฒ์ญํด์ผ ํ์ต๋๋ค. FWIW๋ Inconclusive ๊ฒฐ๊ณผ ์ํ์ ์ ์ฌํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ณ๊ฒฝ์ ์๋์ ์ด์๊ณ ์ค๋ซ๋์ ๊ณํ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋๋ฌด ๋ง์ ์๊ฐ ๋์ ์์ธ์ ์์กดํ๊ณ ์ถ์ง ์์ผ๋ฉฐ ํ ์คํธ๋ฅผ ์ค๋จํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ด์ค์ ์ ๊ฒฐ๊ณผ(๊ฒฐ๊ตญ ํต๊ณผ๋ ๊ฒ์ ํฌํจํ์ฌ)๋ฅผ ๋ณด๊ณ ํ๊ณ ์ถ์ต๋๋ค. ๊ทํ์ ๊ฐ์ ์ฌ์ฉ์์๊ฒ ๋ฏธ์น๋ ์ํฅ์ ์ํํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ์ง๋ง ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ถ์์ ํ ํ ์คํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์๋ ๊ฐ ํ์ค์ ํ ์คํธ๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ถํํ๋ ๋ง์ ํ์ด "๋ฌด์๋ ํ ์คํธ๋ฅผ ๋ฌด์"ํ๋ฏ๋ก ์ข์ ์ ํ์ด ์๋๋๋ค. ํ์์ ๊ฒฝ๊ณ ๋ฅผ ์ฌ๊ฐํ๊ฒ ๋ฐ์๋ค์ด๋๋ก ํ๋ จํ ์ ์๋ค๋ฉด(์ฌ์ค์ ์ค๋ฅ ๋ฐ ์คํจ๋งํผ์ด๋ ์ฌ๊ฐํ๊ฒ) ๊ฒฝ๊ณ ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ทจ์ฝ์ฑ์ ๊ฐ์กฐํ ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ๊ฐ๋ฅ์ฑ์ ์ข ๋ฃ ์์ฑ๊ณผ ํจ๊ป ๋ฌด์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋ ์ง๊น์ง ์์ ๋์ง ์์ผ๋ฉด ์คํจ๋ก ๋ณ๊ฒฝ๋๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
BTW, ๋ด๊ฐ ํ์ ์ง๋ํ ๋ ๋๋ ๋ณดํต ๋ฌด์๋ ํ ์คํธ์ Big Visible Display๋ฅผ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. ๋๋ถ๋ถ์ ํ์์๋ ๋๊ฐ ๋ฌด์์ ๋ด๋นํ๋์ง ์๊ณ ์์ผ๋ฏ๋ก ์ค์ ๋ก ๋น์ ์์ ํ ์คํธ๋ฅผ ๋ด๋นํ๋ ์ฌ๋์ ๋ถ๋ฅผ ํ์๊ฐ ์์ต๋๋ค. ๋ชจ๋ ์ฌ๋์ด ๋ฌธ์ ๋ฅผ ๋ณผ ๋ ํด๊ฒฐ๋๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
@svanimpelen ๋น์ ์์ ํ
์คํธ์ Retry
์์ฑ์ ์ฌ์ฉํด ๋ณด์
จ์ต๋๊น ? ์ฌ๋ฌ ๋ฒ ์คํํ์ฌ ํต๊ณผํ๋๋ก ํ ์ ์์ต๋๋ค.
ํ์๊ธฐ์์ ํ ์คํธ๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒฝ๊ณ ๋ก ์ธํด ํ์ฌ ์ง์ํ๋ MSTest์ ์ ํ๋ ์๋ณด๋ค ๋ ๋ง์ ๊ฒฐ๊ณผ ์ํ๋ฅผ ์ง์ ํ ์ ์๋๋ก Visual Studio ํ๊ณผ ๋ ผ์ํ์ต๋๋ค. ๊ทธ๋ค์ ์์ด๋์ด๋ฅผ ์ข์ํ๋ฏ๋ก ์์ผ๋ก ๊ฐ์ ์ฌํญ์ ๋ณผ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋๊น์ง ๋น์ ์ ๊ฑด๋ ๋ฐ๋ ๊ณ ํต์ํด์ผํฉ๋๋ค. ์ฆ, ๊ฑด๋๋ฐ๋ฉด ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค. ๋๋ ๋น์ ์ด ๊ฒฝ๊ณ ๊ฐ ๋งค์ฐ ๋ช ํํ๊ธฐ๋ฅผ ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค ๐
API๊ฐ ์คํจ ์ AssertionException์ ๋ฐ์์ํจ๋ค๋ ๋ง์ ๋ฉ์๋๊ฐ ๋ฌธ์ํ๋์ด ์์ต๋๋ค.
์ด ๋ฌธ์์ NUnit์ ์ค๋ ๋์์ด 3.10์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ์ฑํ์ง ์์ต๋๊น?
๋ด๊ฐ ๋์น๊ณ ์๋ ๊ฒ์ด ์๋ค๋ฉด ์ ์ด๋ ์ง๊ธ์ ์๋ชป๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
์ฌ๋ฌ ์ด์ค์
๋ธ๋ก์ ๋์
ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์๊ฐ ์คํด์ ์์ง๊ฐ ์๋ค๋ ์ ์ ๋์ํฉ๋๋ค. ์ฆ, ์ด ๊ฒฝ์ฐ์๋ AssertionException
๊ฐ ๊ณ์ ๋ฐ์ํ๊ณ ์์ง๋ง ์ฐจ์ด์ ์ ์์ธ๊ฐ ํฌ์ฐฉ๋์์์๋ ๋ถ๊ตฌํ๊ณ ์ด์ ํ
์คํธ๊ฐ Visual Studio์์ ์คํจ๋ก ๋ณด๊ณ ๋๋ค๋ ๊ฒ์
๋๋ค. ๋๋ ๊ทธ๊ฒ์ ํ๊ธฐ์ ์ธ ๋ณํ๋ก ๋ณด์ง ์์ต๋๋ค. ์ฌ์ฉ์๋ ๋ฌธ์ํ๋์ง ์์ ํ๋์ ์์กดํ๊ณ ์์์ต๋๋ค. ๋์๊ฒ ๊ทธ๊ฒ์ ํ
์คํธ๋ฅผ ์ฃผ๋ฌธํ๊ธฐ ์ํด ์ํ๋ฒณ ์์๋ก ํ
์คํธ๊ฐ ์คํ๋์๋ค๋ ์ฌ์ค์ ์์กดํ๋ ์ฌ์ฉ์์ ๋ค๋ฅด์ง ์์ต๋๋ค.
๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์์ธ ๋ฐ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ false ์กฐ๊ฑด์ด ํ ์คํธ์ ์คํจํ๋ค๊ณ ๋ช ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ /๋๋ ๋ค์ค ์ฃผ์ฅ ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๊ณ ๋งํ ์ ์์ต๋๊น? ๊ฐ์ธ์ ์ผ๋ก throw๋๋ ์์ธ ์ ํ์ ๋ด๋ถ ์ธ๋ถ ์ ๋ณด๋ผ๊ณ ์๊ฐํ๋ฏ๋ก ์ฒซ ๋ฒ์งธ ์ต์ ์ ์ ํธํฉ๋๋ค.
๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์ธ ์ฌ์ฉ์ด ์ด๋์๋ ๋ฌธ์ํ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ํค ์น์ ์ ์์ ์ ์์ต๋๋ค.
๋ฉ์๋ ๋ฌธ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ค๊ณ ๋ช ์๋์ด ์๋ ๊ฒฝ์ฐ ํธ์ถ ์ฌ์ดํธ์์ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ๊ฒ์ด ๋ช ๋ฐฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค. C#์๋ ํ์ธ๋ ์์ธ๊ฐ ์์ผ๋ฉฐ XML ๋ฌธ์๋ ๋ฉ์๋ ๊ณ์ฝ์ ํด๋น ๋ถ๋ถ์ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ด๊ฐ ์๋ ํ "throws X"๋ผ๋ ์ธ์ด๋ ํญ์ ๋ฉ์๋๊ฐ ๊ทธ๊ฒ์ ์ก์ง ๋ชปํ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๋๋ ์ฌ์ ํ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ๋ฐ์๋ค์๋์ง ์ฝ๊ฐ ๊ฑฑ์ ๋ฉ๋๋ค. ์ํค์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ํ ์ชฝ์ ์์ ์ ์์ต๋๊น?
XML ๋ฌธ์์์ AssertionException์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐํ๊ณ ์ฌ๋๋ค์๊ฒ AssertionException์ ์ฌ์ฉํ์ง ์๋๋ก ๊ฒฝ๊ณ ํ๋ ์ํค ํ์ด์ง๋ฅผ ๋ง๋๋ ์์ด๋์ด๊ฐ ๋ง์์ ๋ญ๋๋ค.
๐ญ AssertionException
์ก๋ ๊ฒ์ด ํญ์ ๋ฒ๊ทธ๋ผ๋ฉด, ๊ทธ ์ ํ์ ๋ด๋ถ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๊น?
@jnm2.
๋๋ XML ๋ฌธ์์ ์ค์์ฑ์ ๋์ํ์ง๋ง ์ฌ์ค ๊ทธ ๋ฌธ์๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ๊ณ์ฝ์ ์ผ๋ถ๋ฅผ ํต์ ํด์จ ๋ฐฉ์์ด __์๋๋๋ค__. ๋๋ ์ค์ ๋ก ๋น์ ์ด ๊ทธ๊ฒ์ ์ ์ํ ์ฒซ๋ฒ์งธ ์ฌ๋์ผ์ง๋ ๋ชจ๋ฅธ๋ค๊ณ ์๊ฐํ๊ณ ๋๋ ๊ทธ๊ฒ์ด ์ข์ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ๊ทธ๋ฐ ์์ผ๋ก ์๊ฐํ๊ธฐ ์์ํ๋ฉด ๋ง์ ์๋ชป๋ ๋๊ธ์ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ ์ ์ ์ธ์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค! ๋๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ฌํ ๊ฐ๊ฐ์ ๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ทจ๊ธํ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ๋์ ๋ณ๊ฒฝ์ ์ค๋จ์ผ๋ก ํฉ๋ฆฌ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ง๋ง ์ด๋ ๋ค๋ฆ ๋๋ค. ๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๊นจ์ง์ง ์์์ผ ํฉ๋๋ค.
์ด๊ฒ์ ์ฃผ์ ๋ณ๊ฒฝ ๋ชฉ๋ก์ ๋ฌด์์ด ์์ด์ผ ํ๋์ง์ ๋ํ ์ง๋ฌธ์ ์ ๊ธฐํฉ๋๋ค. ๊ทํ์ ๊ณผ๊ฑฐ ์๊ฒฌ์ ์ดํดํ๋ค๋ฉด ์ฌ์ฉ์์๊ฒ ํผํด๋ฅผ ์ค ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ฌธ์ํํ๋ ค๋ ๊ฒฝํฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋ง์ ์ฌ์ฉ์๋ฅผ ๋ง์น ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ ๋ฌธ์ํํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
์ฐจ์ด์ ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ๋์ํ์ง ์์ ์ ์์ต๋๋ค. __ํ๊ดด๋ ์ ์๋ ๋ชจ๋ ๊ฒ__์ ๋ฌธ์ํํ๋ ๊ฒ์ ๋์๊ฒ CYA์ ๊ฐ์ ๋์๊ฐ ๋ฉ๋๋ค. ๋ง์น ๊ฒฝ์์ง์ด ์คํจ ์์ฒด๋ฅผ ์๋ฐฉํ๊ธฐ๋ณด๋ค ๋๊ฐ ์คํจ์ ์ฑ ์์ ์ง๋์ง์ ์ง์คํ ๋ ๋๋๋ก ํ๋ํ๋ ์ข ๋ฅ์ CYA์ ๊ฐ์ต๋๋ค. ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ๊ฒ์ ๋ฌธ์ํํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ๋งํ ์ ์์ต๋๋ค... "๋ด, ์ฐ๋ฆฌ๋ ๋ฎ์ฌ์๋ค." ์ฐ๋ฆฌ๊ฐ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ๋ง ๋ฌธ์ํํ๋ฉด ์๋ชป๋๊ณ ์ฌ๊ณผํด์ผ ํ ์ํ์ด ์์ง๋ง ์ผ๋ฐ ์ฌ์ฉ์๋ ๋ณ๊ฒฝ ์ฌํญ ์งํฉ์ ํจ์ฌ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ๋๋ ํ์๋ฅผ ์ ํธํ๋ค.
์ด์ค์ ์์ธ๋ฅผ ์ก๋ ๊ฒ์ด ์์ ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, TestExecutionContext๊ฐ ๊ด๋ จ๋์ง ์๊ณ ํ ์คํธ๋ฅผ ์ง์ ์คํํ ๋ ์์ ํ๊ฒ ์ ์ง๋๋๋ก ์ผ๋ง ์ ์ ๋ณ๊ฒฝํ์ต๋๋ค. ์์ธ๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๋ง๋ค๋ฉด ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฌ์ค ๊นจ์ ๊ธฐ๋ปค๋๋ฐ ํ์์ ์๋๋ค๊ณ ํด์ ์์ ํ์ต๋๋ค. ๋ฌด์์ ๊นจ๊ณ ์ถ์์ง ๊ฒฐ์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ ์์ ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ฝ๋๊ฐ ์๋๋ผ ํ ์คํธ ์์ฒด ๋ด๋ถ์์ ์์ธ๋ฅผ ์ก๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ ํ์ฌ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ์ง __ํ์ง__ ์์์ต๋๋ค.
ํ ์คํธ์์ AssertionException์ ์ก๋ ๊ฒ์ ๋ด๊ฐ ๊ณ ์ ์ ์ธ "๋์"๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ๋๋ค. ํ๋ฆด ์๋ ์๊ฒ ์ง๋ง ๊ตฌ์ฒด์ ์ธ ์ฌ๋ก๋ฅผ ์ดํด๋ด์ผ ์ ์ ์๋ค. ๋๋ ์ฌ์ฉ์์๊ฒ "Catching AssertionException์ NUnit ๋ด๋ถ์ ๋ํ ์์ธํ ์ง์์ด ์๋ ํ ์ค๋ฅ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๋์์ ๋ณด์ฅํ๋ ค๋ฉด ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ์ง ๋ง๊ณ ์ํ๋ ์์ ์ ์ํํ ํ ์์ธ๋ฅผ ๋ค์ ๋ฐ์์์ผ์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ผ๋ก." ๊ทธ๋ฌ๋ ๋๋ ์ฌ์ ํ ๊ทธ๋ฌํ ์ ๋ณด๊ฐ XML ๋ฌธ์ ๋๋ ์ผ๋ฐ ์ฌ์ฉ์ ๋ฌธ์์ ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ด๋ถ ์น์ ์ ํ์ด์ง๋ก ๋ฃ์ ๊ฒ์ ๋๋ค.
BTW, ๋ด ๊ณผ๊ฑฐ ๊ฒฝํ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฌธ์ํํ ๋ค์ ์ฌ๋๋ค์๊ฒ ์ฌ์ฉํ์ง ๋ง๋ผ๊ณ ๋งํ๋ฉด ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ๐
์ข์ ์ , ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๋ถ๋ถ์ ์ผ๋ก CYA์ ๊ด์ ์์ ์๊ฐํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ๋ค๋ฅธ ์์๋ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋น์๋ก์ ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ชจ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฃ๋ ๊ฒ์ ๊ฐ์ฌํ์ฌ ์ ์ฝ๋์์ ์๋ชป๋ ๊ฐ์ ์ ์ฐพ์ ์ ์์ต๋๋ค. ํนํ ์ปดํ์ผ๋ฌ๊ฐ ์์์ฐจ๋ฆฌ์ง ๋ชปํ๋ ์ด์ ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒฝ์ฐ. ๋๋ ๊ทธ๊ฒ์ ๊ฐ์ฌํ๊ฒ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด๋ ์ ๋ ์ฌ์ฉ์์๊ฒ ํฌ์ํฉ๋๋ค.
๋ฌธ์ ์์ ์ฌํญ์ ์ถ์ ํ๊ธฐ ์ํด ์ ๋ฌธ์ ๋ฅผ ์์ํด์ผ ํฉ๋๊น?
์ ์๋ก์ด๊ฐ?
์ ๋ชฉ์ ์์ ํ๊ธฐ๋ณด๋ค๋ ๋ต๋ณ๋ ์ง๋ฌธ์ผ๋ก ๋ซ์ ๊ฒ ๊ฐ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ๋ชฉ์ ๋ณ๊ฒฝํ๊ณ ์ด ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํฉ๋๊น?
๋ด๊ฐ ์ผ๋ฐ์ ์ผ๋ก ํ ์ผ์ ๋ฌธ์ ๋ฅผ ๊ฒํ ํ๊ณ ๋ถ๋ฅํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๋ฌธ์ ๋ก ๋ถ๋ฅํฉ๋๋ค. ๋ถ๋ช ํ, ์ฐ๋ฆฌ๋ ๊ฐ๋ฅํ ๋ฒ๊ทธ๋ก ๋จผ์ ๋ ผ์ํ๋ ๋ฐ ์ ๋ง ์ค๋ ์๊ฐ์ ๋ณด๋์ต๋๋ค. ํ๋ก์ ํธ ๊ด๋ฆฌ์ ๊ดํ ์ง๋ฌธ์ ๋๋ค. ์ค์ ๋ก๋ ์ ๋ฒ์ ๋ฐ์ ๋๋ค.
๋ด ๋ง์ ๋ ผ๋ฆฌ์ ์ด๊ณ ์ผ๊ด์ฑ ์๋ ์ผ์ ํ๋ผ๋ ๊ฒ์ ๋๋ค. ๐ ๋ฒ๊ทธ๊ฐ ์๋๋ฏ๋ก ๋ซ๋ ๊ฒ์ ์ต์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ถ๋ง ์ฌํญ๊ณผ ์๋ฃจ์ ์ ๊ตฌ๋ถํฉ๋๋ค. ๋ฌธ์ ๋ฒ๊ทธ๋ก ์ฌ๋ถ๋ฅํ๊ณ ์ ๋ชฉ์ ํธ์งํ ๋ ์ค๋ช ๋๊ธ์ ์์ฑํ๋ฉด ๋ถ๋ง ์ฌํญ์ด ์๋ ์๋ฃจ์ ์ ์ ์งํ ์ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ๋ Done issues์ ์ด์ ์ ๋ชฉ์ ๋ฆด๋ฆฌ์ค ๋ ธํธ์์ ๋๋๋ฏ๋ก ๋ฐ์ํ ์ผ์ ํํํด์ผ ํฉ๋๋ค.
์์ธ๋ฅผ ์ก๊ธฐ ์ํด ์ค์ ๋ก ์ํํ๋ ค๋ ์์ ์ ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น? ๋ ๋์ ์๋ฃจ์ ์ ์ฐพ๋ ๋ฐ ๋์์ ๋๋ฆด ์ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
3.10์ผ๋ก ์
๊ทธ๋ ์ด๋ํ ํ ํ
์คํธ๊ฐ ์คํจํ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค. ์ด์ ์ฌ๊ธฐ ๋ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ํ
์คํธ ์ด์ค์
๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ด๋ถ์ ์ผ๋ก NUnit.Assert๋ฅผ ํธ์ถํฉ๋๋ค. ๋๋ ์ด๋ฌํ ์ด์ค์
๋ฉ์๋๋ฅผ ํ
์คํธํ์ฌ ์คํจํ ๊ฒ์ผ๋ก ์์ํ ๋ ์ค์ ๋ก ์คํจํ๋์ง ํ์ธํฉ๋๋ค.
ํ์ฌ ๋ด ํ
์คํธ๋ AssertionException
๋ฅผ ํฌ์ฐฉํ์ฌ ์ฌ์ฉ์ ์ง์ ์ด์ค์
๋ฉ์๋๊ฐ ํ
์คํธ๋ฅผ ์คํจํ๊ฒ ํ์ง๋ง ์
๊ทธ๋ ์ด๋ ํ์๋ ์์ ์ด์ ๋ก ๋ชจ๋ ํ
์คํธ๊ฐ ์คํจํ๊ธฐ ์์ํฉ๋๋ค.
3.10์์ ๊ถ์ฅ๋๋ ํ ์คํธ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๊ฐ์ฌ ํด์.
๊ฐ์ฅ ๊ฐ๋จํ ์ ๊ทผ ๋ฐฉ์์ ์ง์ ์ํํ๋ ๋์ Assert.Throws๋ฅผ ์ฌ์ฉํ์ฌ ์์ธ๋ฅผ catchํ๋ ๊ฒ์ ๋๋ค. Assert.Throws๋ NUnit ๋ด๋ถ๋ฅผ ์ดํดํ๊ณ ์คํจ๊ฐ ๋ณด๊ณ ๋์ง ์๋๋ก ํฉ๋๋ค.
๋๋ ์์ ๋ ์๋ฆผ์์ ์ด๊ฒ์ ๋ณด์๊ณ ๊ทธ๊ฒ์ ๋ํด ๋ง์ด ์๊ฐํ์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ผ๋ฆฌ ๋ด์์ "Assert.That"์ ์ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋ก์ ํธ ์ ๋ฐ์ดํธ(ํ ์คํธ ๋์ฐ๋ฏธ ํ๋ ์์ํฌ์ ๋๋ค. ํนํ EF ์ปจํ ์คํธ ๋ฐ ์ํฐํฐ๋ฅผ ์ง์ ์ฝ๋ฉํ๊ณ ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๋ฉํ ๋ EF ์ง์์ฑ์ ํ ์คํธํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์๋ ๋ง์ด๊ทธ๋ ์ด์ (๋๋ FluentMigrator์ ๊ฐ์ ๋๊ตฌ ์ฌ์ฉ) -- ์ฆ, ํธ์ถ์๋ฅผ ๋์ ํ์ฌ ์ด์ค์ ์ ์ํ ํด์ผ ํ๋ฏ๋ก ์ด์ ํ ์คํธ๊ฐ ์คํจํด์๋ ์ ๋๋ ๊ณณ์์ ํ ์คํธ๊ฐ ์คํจํฉ๋๋ค. ํนํ ํ ํ ์คํธ๊ฐ ์ด์ค์ ํ๋ ํน์ ์กฐ๊ฑด์ ํ ์คํธ ์คํจ๋ฅผ ๋ฐ์์์ผ์ผ ํฉ๋๋ค. ํ์ง๋ง "catch"๊ฐ ๋ ์ด์ ํญ์ ๊ทธ๋ฌ๋ ๊ฒ์ฒ๋ผ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ํ ์คํธ๋ ์ค์ ๋ก ํต๊ณผํ๋ ๋์ ์คํจํ ๊ฒ์ผ๋ก ๋ณด๊ณ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ ์ ํ NUnit ์ด์ค์
์ ๋์ง ์ ์๊ฑฐ๋ ์ฌ์ฉ์๋ฅผ ์ํด ์ง๋ฃจํ ์์
์ ์ํํ์ฌ ๋ ๋น ๋ฅธ ํ
์คํธ ๊ฐ๋ฐ์ ์ง์ํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋์์ Assert.That
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
์ฌ์ฉ์๊ฐ ์์ธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์์ธ๋ฅผ throwํ ์ ์์ด์ผ ํ๋ค๋ ์ด์ ์ง์ ์ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋น์์ ํ
์คํธ๋ฅผ ์ํด Assert.That
์ฝ๋๊ฐ ์๋ ๋ฌธ์ ๋ ํด๊ฒฐ๋์ง ์์ต๋๋ค. ์ฝ๋๊ฐ nunit ์ด์ค์
์ผ๋ก ์คํจํ๊ธฐ ๋๋ฌธ์ ์คํจ๋ฅผ ๋์ง๋ค๋ ๊ฒ์ ์ฆ๋ช
ํ๊ธฐ ์ํ ํ
์คํธ์
๋๋ค.
๊ฒฐ๊ณผ API ์ค ์ผ๋ถ๋ฅผ ์ ํํํด์ผ ํ ๊น์?
@fluffynuts ๋ด๊ฐ ๋น์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด catch
์ ์ ์ฌ์ฉ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋๊ฐ ์๋๋ผ ํ
์คํธ ์ฝ๋์ ์์ต๋๋ค. (์ฌ์ฉ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์๋ค๋ฉด ์ด์ ๋ํด ์ด์ผ๊ธฐํ ์ ์์ง๋ง ๋ฌธ์ ๋ ์ฝ๊ฐ ๋ค๋ฆ
๋๋ค.)
๋ฌผ๋ก NUnit์๋ ์์ฒด ํ ์คํธ๊ฐ ์์ผ๋ฏ๋ก ์ด ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ ๋์ ์ ํํ ๋์ผํ ์ ์ฌ์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๋น์ฐํ ํ ์คํธ๋ฅผ ๊ณ์ ํต๊ณผํ๋๋ก ์์ฒด ํ ์คํธ๋ฅผ ์์ ํ์ต๋๋ค. ๋น์ ์ ๊ฐ์ ์ผ์ ํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ์ด์ ์ Assert.Throws
์
๋๋ค. ํ
์คํธ ์คํจ ๋์์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ try / catch(AssertionException)
๋ฅผ Assert.Throws<AssertionException>
์ง์ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ด๋ถ์ ์ผ๋ก Assert.Throws
๋ TestExecutionContext
๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ค์ ํ
์คํธ ๊ฒฐ๊ณผ๊ฐ ํ
์คํธ ์ค์ธ ์ค๋ฅ๋ก ์ธํด ์ค์ผ๋์ง ์๋๋ก ํฉ๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ ๊ณ ์ ํ ๊ฒฉ๋ฆฌ ์ปจํ
์คํธ๋ฅผ ๋ง๋ค์ด์ผ ํ ์๋ ์์ต๋๋ค. Assert.Throws
๋ํ ์ฝ๋๋ฅผ ๊ฒ์ฌํ์ฌ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ NUnit์ ์์ฒด ์คํจ ํ ์คํธ์ ๋๋ถ๋ถ์ ์ค์ ๋ก ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์์ฒด ํ ์คํธ ํ๋ก๊ทธ๋จ์์ ์คํ๋๋ ํ ์คํธ๊ฐ ํฌํจ๋ ๋ณ๋์ ์ด์ ๋ธ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์บก์ฒํ ๋ค์ ๊ฒํ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ ๋ง์ ์์ ์ด์ง๋ง NUnit์ ๋ํ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ ์คํธ์ ๋๋ฌด ๋ง์ด ๋ฃ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋๋ถ๋ถ์ ๋ฐฉ๋ฒ์ ํ ์คํธ ์ ํธ๋ฆฌํฐ ์ด์ ๋ธ๋ฆฌ์์ ์ฐพ์ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด @jnm2 ๊ฐ ๋งํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ง๋ฌธ์ด ์์ผ๋ฉด ๊ฒ์ํ๊ฑฐ๋ ์คํ๋ผ์ธ์ผ๋ก ์ฐ๋ฝํ์ฌ ์ด์ ๋ํ ์ถ๊ฐ ๋์์ ๋ฐ์ผ์ธ์.
์ ๋ณด์ ๋ํด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์, ์ด์ค์ ์ ํ ์คํธ ์ฝ๋ ๋ด์์ ํฌ์ฐฉ๋ฉ๋๋ค. Assert.Throws๋ ์ผ๋ฐ์ ์ผ๋ก ํธ๋ฆญ์ ์ํํ์ง๋ง ๋ฌธ์ ์ ํน์ ํ ์คํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์์ผ ํ๋ ๋ ์ง/์๊ฐ ๊ฐ์ ํ ์คํธํ๋ ๋ฐ ํ์ฉ๋๋ ๋ธํ๊ฐ "๋๋ฌด ๋ฎ์"์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ localdb๋ก์ ๋๋ฆฌํํธ๋ 1ms์ด์ง๋ง ๋๋ก๋ ๋ ๋๊ฒ ๋๋ฆฌํํธ๋ฉ๋๋ค. ์ด ํ ์คํธ๋ "๊ฐ๋" ๋ฐ์ํ๋ค๊ณ ๋จ์ธํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๊ทธ๋์ ํ์ฌ 4๊ฐ์ ๋ณ๋ ฌ ์ค๋ ๋์์ ์ฝ๋๋ฅผ 10๋ฒ ์คํํ๊ณ ์ ์ด๋ ํ ๋ฒ์ ์คํจํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. Assert.Throws๋ ๋ถํํ๋ ์ด ๊ฒฝ์ฐ์ ๋๋ฌด ๊ฒฐ์ ์ ์ด๋ฏ๋ก nunit ์์ธ(๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋ ๋ด์์ Assert) ์ฌ์ฉ์ ์ค๋จํ๊ฑฐ๋ ์ฌ๋ฌ๋ถ์ด ์ฌ์ฉํ๋ fu๋ฅผ ๋ฐฐ์์ผ ํฉ๋๋ค. ์ํ๋ ๊ฒฝ์ฐ ์คํ๋ผ์ธ์์ ๋ฐ์ํ ์ ์๋ ๋ชจ๋ ์ง์นจ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
ํ, ๋ด๊ฐ ๋ณด๊ณ ์๋ AsyncVoidVerificationScope์ ๋ํ ๋ฉ์์ง ํํ ํ ์คํธ ์คํจ๊ฐ @fluffynuts ๊ฐ ๊ฒช๊ณ ์๋ ๊ฒ๊ณผ ์ ํํ ๊ฐ์ ๋ฌธ์ ๋ผ๋ ๊ฒ์
์ด์จ๋ , ๋ด๊ฐ ํ๊ณ ์ถ์ ๊ฒ์ Assert.Throws
๊ฐ ํ๋ ๊ฒ์ฒ๋ผ using (new TestExecutionContext.IsolatedContext())
์์ ๋๋ฆฌ์ ํธ์ถ์ ๋ํํ๋ ๊ฒ์
๋๋ค.
Assert.Throws
๋ฐ Assert.ThrowsAsync
๋ ๋น๋๊ธฐ ๋๋ฆฌ์๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ๊ฒฉ๋ฆฌ๋ ์ปจํ
์คํธ๋ฅผ ์ค์ ํ์ง ์์ต๋๋ค. ์ ์ด๋ฐ๊ฑฐ์ผ?
@fluffynuts ์ค๋์ ์ ๋ด๊ฐ Assert.Catch
์ฒ์ ์ผ์ ๋ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ฟ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค. ๋ถํํ๋ ๋ณ๊ฒฝ๋์ด ๋ ์ด์ Assert.Throws
ํด๋นํ๋ "์ค๋ฆฝ"์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ ํ๋๋ฅผ ์ธ ์ ์์ต๋๋ค. ๋ค์์ Assert.Throws
์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ
์คํธ๋์ง ์์ ๋ฒ์ ์
๋๋ค. ๋๊ธฐ ์ฝ๋๋ง ์ฒ๋ฆฌํ์ง๋ง Assert.Throws
์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ๋ก ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
```C#
๊ณต๊ฐ ์ ์ ๋ฌดํจ ์์ธ SafelyCatchAnNUnitException(TestDelegate ์ฝ๋)
{
์์ธ catchException = null;
using (new TestExecutionContext.IsolatedContext())
{
try
{
code();
}
catch (Exception ex)
{
caughtException = ex;
}
return caughtException;
}
}
```
์ด ๋ฉ์๋๋ NUnit์ assert ๋ฉ์๋๊ฐ ๋จ๊ธด ์ค๋ฅ์ ๋๋จธ์ง ๋ถ๋ถ์ ์ ๋ฆฌํ์ฌ throw๋ ๋ชจ๋ ์์ธ๋ฅผ ๋ฐํํฉ๋๋ค. ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
์ฝ๋์์ ๋ ๋์ ์์ค์์ IsolatedContext()
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ธ์ ๋ํ ์ฐธ์กฐ ์์ด ํ
์คํธ ๊ฒฐ๊ณผ ์์ค์์ ์์ ํ ํ
์คํธํ ์ ์์ต๋๋ค. ๋๋ NUnit์ด ํ์ฌ ์์ฒด ํ
์คํธ๋ฅผ ์ํํ๋ ๋ฐฉ์๋ณด๋ค ์ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ์ด๋ฌํ ์ ํ์ ํ
์คํธ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ํด ์ฝ๊ฐ์ ์๊ฐ์ ํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@fluffynuts ์ค๋์ ์ ๋ด๊ฐ
Assert.Catch
์ฒ์ ์ผ์ ๋ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ฟ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค. ๋ถํํ๋ ๋ณ๊ฒฝ๋์ด ๋ ์ด์Assert.Throws
ํด๋นํ๋ "์ค๋ฆฝ"์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ ํ๋๋ฅผ ์ธ ์ ์์ต๋๋ค. ๋ค์์Assert.Throws
์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ ์คํธ๋์ง ์์ ๋ฒ์ ์ ๋๋ค. ๋๊ธฐ ์ฝ๋๋ง ์ฒ๋ฆฌํ์ง๋งAssert.Throws
์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ๋ก ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.```C#
๊ณต๊ฐ ์ ์ ๋ฌดํจ ์์ธ SafelyCatchAnNUnitException(TestDelegate ์ฝ๋)
{
์์ธ catchException = null;
}
```
์ด ๋ฉ์๋๋ NUnit์ assert ๋ฉ์๋๊ฐ ๋จ๊ธด ์ค๋ฅ์ ๋๋จธ์ง ๋ถ๋ถ์ ์ ๋ฆฌํ์ฌ throw๋ ๋ชจ๋ ์์ธ๋ฅผ ๋ฐํํฉ๋๋ค. ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
์ฝ๋์์ ๋ ๋์ ์์ค์์
IsolatedContext()
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ธ์ ๋ํ ์ฐธ์กฐ ์์ด ํ ์คํธ ๊ฒฐ๊ณผ ์์ค์์ ์์ ํ ํ ์คํธํ ์ ์์ต๋๋ค. ๋๋ NUnit์ด ํ์ฌ ์์ฒด ํ ์คํธ๋ฅผ ์ํํ๋ ๋ฐฉ์๋ณด๋ค ์ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ์ด๋ฌํ ์ ํ์ ํ ์คํธ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ํด ์ฝ๊ฐ์ ์๊ฐ์ ํ์ต๋๋ค.