ํ์ฌ, ์ฐ๋ฆฌ๋ ํฝ์ค์ณ ๋ ๋ฒจ์์๋ง ๋ณ๋ ฌ ์คํ์ ๊ตฌํํ์ต๋๋ค. ๋งค๊ฐ๋ณ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ณ ํ ์คํธ ์ฌ๋ก๋ฟ๋ง ์๋๋ผ ํฝ์ค์ฒ์ ๊ฐ๋ณ ๋ฐฉ๋ฒ์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์์ด์ผ ํฉ๋๋ค.
ํฝ์ค์ฒ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ํํ ๋ณ๋ ฌ๋ ์์ค์ ์ง์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ์ด์ ์ #66์ ์ผ๋ถ์์ต๋๋ค.
์ ๋ฐ์ดํธ: ์ด ๋๊ธ๊ณผ ๋ค์ ๋๊ธ์ ๋ชจ๋ ๋ถ๋ช ํ ์์ ์ ๋๊ธ์ ์ญ์ ํ ๊ฐ์ธ์ ๋ํ ๋ต๋ณ์ด์์ต๋๋ค. ๋ต์ ๋จ๊น๋๋ค.
๊ธ์, ๊ทธ๊ฒ์ ์ฌ์์ ์์ผ๋ฉฐ 3.0 ์ดํ ๊ตฌํ์ ์ํด ์์ ๋์ด ์์ต๋๋ค. ๊ทธ๊ฒ ๊ทธ๋ ๊ฒ ์ฌ์ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์๋ง ํด๋์ ๊ฒ์ ๋๋ค. mbunit๊ณผ ์ด๋ค ์ฐ๊ฒฐ์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๋ค์ด ๊ทธ๊ฒ์ ๊ฐ์ก๋ค๋ ์ฌ์ค์ ์ฐ๋ฆฌ์๊ฒ ๋์์ด ๋์ง ์์ต๋๋ค.
์ด๊ฒ์ ์กฐ๊ธ ์ง๋ฃจํด์ง๊ณ ์์ต๋๋ค. ์ด๋ฏธ ์ธ๊ธ๋์์ง๋ง ๋ถ๋ช ํ ๋์น ๋ช ๊ฐ์ง ์์ ...
"๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง"์ ๋ํ ๋น์ ์ ์ด์ผ๊ธฐ๋ ๋งค์ฐ ํผ๋์ค๋ฝ์ต๋๋ค. ์คํ ์์ค๋ ์ ์๊ถ์ด ์กด์ค๋๋ ์ํฉ์์๋ง ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ mbunit ๋ผ์ด์ ์ค ์กฐ๊ฑด์ ๋ฌด์ํ ์ ์๋ค๊ณ ์ ์ํ๋ค๋ฉด ๊ธฐ๋ณธ์์ ๋ฒ์ด๋ ๊ฒ์ ๋๋ค.
MbUnit์ ๋ง์ ํจ์น๋ฅผ ์ ๊ณตํ๊ณ ๋ช ๋
๋์ ์ฌ์ฉํ์ง๋ง
๊ฒฐ์ฝ ํต์ฌ ๊ธฐ์ฌ์๊ฐ ์๋๋๋ค. ๋ด ์ํ๊ฐ ์๋ชป ํํ๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค :)
๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์๋ ์ค์ ๋ก ์๋ฌด ์์ฉ์ด ์์ต๋๋ค. NUnit ์๋
MbUnit๊ณผ ์์ ํ ๋ค๋ฆ
๋๋ค. ์ฐ๋ฆฌ๋ ์ ์ ํ ์๊ฐ์ ์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฃฐ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ณ๊ฒฝ ๋ ์ ์์ผ๋ฏ๋ก ์ ์คํ๊ฒ ์ ๊ทผํ์ญ์์ค.
์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ๊ตฌํํ๋ ๋ฐ ํ์ํ ๋ฐฉ๋ฒ ๋๋ ์ถฉ๋.
2015๋
4์ 19์ผ ์ค์ 2์ 45๋ถ์ "CharliePoole" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ด๊ฒ์ ์กฐ๊ธ ์ง๋ฃจํด์ง๊ณ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ ์ ์ด๋ฏธ ์ธ๊ธํ์ง๋ง
๋ถ๋ช ํ ๋์น...1.
๋น์ ์ด ์๊ตฌํ๋ ๊ฒ์ ๊ตฌํํ ๊ณํ์ด ์์ต๋๋ค.
2.ํน์ ์์ ์ ์ผ์ ์ ์ก๊ธฐ๋ก ํ์ต๋๋ค.
์ผ.์์ ๋ ์๊ฐ์ ์ฃผ๋ก ์ฐ๋ฆฌ์ ํ๊ฐ์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ๋น๊ตํ์ฌ ๊ธฐ๋ฅ์ ๊ฐ์น.
4.NUnit ํ์๋ ๊ตฌํํ ์ ์๋ ๋ช ๋ช ์ ์ฌ๋๋ค์ด ์์ต๋๋ค.
ํน์ง.
5.๊ทธ๋ค์ ์ฐ์ ์์์ ๋ฐ๋ผ ๊ทธ๊ฒ์ ๊ตฌํํ ์ ์์ ๊ฒ์ ๋๋ค.
์ด๋์์๋ ๋ณต์ฌํ ํ์๊ฐ ์์ต๋๋ค."๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง"์ ๋ํ ๋น์ ์ ์ด์ผ๊ธฐ๋ ๋งค์ฐ ํผ๋์ค๋ฝ์ต๋๋ค. ์คํ ์์ค๋
์ ์๊ถ์ด ์กด์ค๋๋ ์ํฉ์์๋ง ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋์ ๋ง์ฝ ๋น์ ์ด
์ฐ๋ฆฌ๊ฐ mbunit ๋ผ์ด์ ์ค ์กฐ๊ฑด์ ๋ฌด์ํ ์ ์์์ ์์ํฉ๋๋ค.
๋ฒ ์ด์ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/nunit/nunit/issues/164#issuecomment -94244650.
๋๋ณด๋ค ํจ์ฌ ์ฌ์น์๋ ๋๊ธ!
๋ณ๋ ฌ ์คํ์ ์ธ๊ณ์์ ์ฐ๋ฆฌ์ ํ์ฌ ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ์ ์ฉํ ์์๋ฅผ ๋ํ๋ด๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ ๋ฌด์ธ๊ฐ๋ฅผ 3.0 ์ดํ๋ก ํ์ํ๋ ๊ฒ์ด 3.0์ ์ผ๋ถ๋ก ๋ง๋ค ๋๋ณด๋ค ๋์ค์ ํด๋น ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ค๋ ์๋ฏธ๋ ์๋๋ผ๋ ์ ๋ ์ธ๊ธํ๊ฒ ์ต๋๋ค. ์คํ๋ ค 3.0์ด ๋ ๋น ๋ฅธ ์์ ์ ์จ๋ค๋ ์๋ฏธ์ผ ์ ์์ต๋๋ค.
์ด ์์ ์ ์ํํ ๋ ์ค์ ๋ฐ ํด์ ๋ช ๋ น์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ์ฌ์ด ์ต์ ์ ๋ฐ์ดํฐ์ ๋ํ ๊ฒฝํฉ์ด ์๋๋ก ๊ฐ ํ ์คํธ์ ๋ํ ํ ์คํธ ํด๋์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค.
์ด์จ๋ ์ด๋ ์์ ์์ ์ต์ ์ ๋ง๋๋ ๊ฒ์ ์ ํธํ์ง๋ง ์คํ ์ต์ ์ธ์ง ๊ณ ์ ์ฅ์น๋ณ(์์ฑ) ์ต์ ์ธ์ง ๋๋ ๋ ๋ค์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
์๋
ํ์ธ์!
NUnit์ ๋ค์ ๋ฒ์ ์ ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒ์
๋๋ค. NUnit์ผ๋ก ์ ํํ๋ ๊ฒ์ ๋ฐฉํดํ๋ ์ ์ผํ ์์์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ ํ โโ3.4์ ๊ณํ๋์ด ์์ต๋๊น?
@julianhaslinger NUnit 3.4๋
์ฐธ๊ณ ๋ก, ์ด ๋ฌธ์ ๋ 3.4๊ฐ ์๋ ๋ฐฑ๋ก๊ทธ ์ด์ ํ(๋๋ ์ ์ฌ ์ด์ ํ)์ ์์ต๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๋ ๋ฏธ๋ฆฌ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง ๊ฐ ์ด์ ํ์ ์์์ ํต์ฌ ์ ์ ๋ฌธ์ ๋ง ์ถ๊ฐํ๋ ๊ดํ์ ๋ฐ๋ฅด๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค์ ์ด์ ํ์ธ 3.6์ 3๊ฐ์ ํ์ ๋ ๋จ์ด์ง ์์ ์ ๋๋ค. :-( ๊ทธ๋ฌ๋ ์ด ๋ฌธ์ ๊ฐ ๋ง์คํฐ์ ๋ณํฉ๋๋ ๊ฒ์ ๋ณธ๋ค๋ฉด MyGet ํผ๋์์ ๋ ์ผ์ฐ ๋๋กญ์ ๋ฐ์ ์ ์์ต๋๋ค.
@julianhaslinger ์ด๊ฒ์ 3.4์ ํฌํจ๋์ง ์์ ๊ฒ์ด๋ฉฐ ์ด๋ ์๋ง๋ ์ผ์ฃผ์ผ ์ ๋ ํ์ ๋์ฌ ๊ฒ์ ๋๋ค.
์ ์ณ๋๊ณ , ๋ณ๋ ฌ ๋ฉ์๋ ์คํ์ ์ง์ํ๋ ์ด๋ค ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? XUnit์ ํด๋์ค ์์ค๊น์ง ๋ณ๋ ฌ๋ก ํ ์คํธ๋ฅผ ์คํํ ์๋ง ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ด๊ฐ ํ๋ ธ์ด? ์ ๋ XUnit์ ๋ง์ด ์ฌ์ฉํ์ง ์์ต๋๋ค :์ค๋ง์ผ:
@CharliePoole ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค! ์ข์, ํ์ง๋ง ์ด๊ฒ์ ์ฝ๊ฐ ๋๋ดํ๊ฒ ๋ค๋ฆฐ๋ค. ๊ทธ๋ฌ๋ ๋ค์ ๋ฆด๋ฆฌ์ค(๋๋ ์ด์ ์ถ์)๋ฅผ ๊ธฐ๋ค๋ฆด ๊ฒ์ ๋๋ค. (์ฌ์ ํ) ๋ค์ ๋ฒ์ (3.6)์์ ์ด ๊ธฐ๋ฅ์ ๊ณ ๋ คํ์ญ์์ค.
@rprouse ์ ๋ ์ง๊ธ MbUnit/Gallio๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ๋ก์ ํธ๊ฐ ๊ฑฐ์ ์ข ๋ฃ๋์๊ณ ์ด์ NUnit์ผ๋ก ์ ํํ๊ฒ ์ต๋๋ค.
@julianhaslinger ๋ฌ๋ํ์์ ๋ฌธ์ ์ธ๊ฐ์? ํฝ์ค์ฒ ๋ด ํ ์คํธ ์ผ์ด์ค ๋ถํฌ์ ๋ํ ์์น๊ฐ ์์ต๋๊น? ์ด ๊ธฐ๋ฅ์ด ์ฌ์ฉ์์๊ฒ ๋ณ๋ ฌ ๊ณ ์ ์ฅ์น์์ ์ป๋ ๊ฒ ์ธ์๋ ๊ฑฐ์ ์ ๊ณตํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ง๋ฌธํฉ๋๋ค. ์๋ชป๋ ๊ฒฝ์ฐ ์๋์ ์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
@CharliePoole ์ ํํ, ์ฐ๋ฆฌ์ ์ค์ ๋ฌธ์ ๋ ํ ์คํธ ์ผ์ด์ค์ ์คํ ์๊ฐ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์๋ํ/ํ๊ท ํ ์คํธ(Selenium/WebDriver ํฌํจ)์ NUnit์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ์ผ๋ถ ํ ์คํธ ํด๋์ค์๋ 200๊ฐ ์ด์์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ NUnit์ผ๋ก ์ ์ฒด ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํ๋ ๊ฒ์ ์ ๋ง ํ๋ ์ผ์ ๋๋ค.
๋น๊ต(ํ๊ท ํ ์คํธ์ ๋ ์์ ํ ์คํธ ์ธํธ ๋ด)๋ ๊ฐ๋ฅํ NUnit ์๋ฃจ์ ์ด ์ฝ 1.5์๊ฐ ๋ด์ ์คํ๋๋ ๋ฐ๋ฉด ํ์ฌ MBunit ์๋ฃจ์ ์ 0.5์๊ฐ(๋์ผํ ํ ์คํธ ์ธํธ)์์ ์คํ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
๊ทธ๋ฌ๋ @CharliePoole , ๋ ํฐ ํ ์คํธ ํด๋์ค๋ฅผ ๋ ์์ ํด๋์ค๋ก ๋ถํ ํ์ฌ ์คํ ์๊ฐ์ ์ค์ผ ์ ์๋ค๋ ์ฌ์ค์ ์๊ณ ์์ง๋ง, ์ด๋ ํ ์คํธ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ์ ์ด๊ธฐ ์์ด๋์ด๋ฅผ ์ด๋ป๊ฒ๋ ํผ์ํ ์ ์์ต๋๋ค.
@julianhaslinger - ํ์ธํ๊ธฐ ์ํด ์คํ ์๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ข ์๋์ง ์๊ณ CPU์ ์ข ์๋๋ค๋ ๊ฒ์ด ํ์คํฉ๋๊น?
NUnit 3๋ก ์ฒ์ ์ ํ์ ์๋ํ์ ๋๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์คํ ์๊ฐ์ด ์๋นํ ๊ธธ์ด์ก์ต๋๋ค. ์ด๊ฒ์ NUnit์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต๋ํํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ ์คํธ ์คํ์ด ์๋ฃ๋ ๋๊น์ง ๋ชจ๋ ํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ์งํ๋ ํ์ฌ ๋ฒ์ ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ ๋ด๋ถ์ ์ผ๋ก ํจ์น๋ ๋ฒ์ ์ ์คํํ๊ณ ์์ต๋๋ค. 3.4์ ๋ํ PR์ ๋ฐ๊ณ ์ถ์์ง๋ง ์ด ์์ ์์ ์๊ฐ์ด ์์์ง ํ์ ์ด ์์ง ์์ต๋๋ค. :-(
์ด๊ฒ์ด ์๋๋ผ๋ฉด ์ฌ๊ณผํ์ง๋ง Selenium์ด ๋ฉ๋ชจ๋ฆฌ์ ๊ณต์ ํ ๊ณต์ ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ธ๊ธํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. :-)
@ChrisMaddock ์ ๋ ฅ
@ChrisMaddock 3.4์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ๋ณด๊ณ ์ถ์ต๋๋ค. PR์ ์ฌ๋ฆฌ๊ณ ์ถ๋ค๋ฉด ์์ง ์ ์ ์ค๋น๊ฐ ๋์ง ์์๋ค๋ฉด ์ ๋ฆฌ๋ฅผ ๋์๋๋ฆด ์ ์์ต๋๋ค :+1:
@rprouse - PR #1367์ ์ด ์ด๊ธฐ ์ปค๋ฐ https://github.com/nunit/nunit/pull/1367/commits/5f98ae51025f7af8244abd4367d1f47260874dfc ๋ ํจ์น๋ v3.0.1์์ ์ฐ๋ฆฌ๋ฅผ ์ํด ์ ์ ํ๊ฒ ํด์ ๋ฉ๋๋ค.
PR์์ ๋ณํฉํ๊ธฐ ์ ์ OneTimeTearDown
๋ก ์ด๋ํ์์ ์ ์ ์์ต๋๋ค. ๊ทธ ์ด๋์ผ๋ก ์ธํด v3.2.1์์ ์๋ํ์ง ์์๋์ง ๋๋ ๋ค์ ๋์
๋ ๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ํ๋์ง ์ ์ ์์ต๋๋ค. ๋ณด์กด - ์ด์ฌ ํ ์ฌ๊ฒ์ฌ๋ฅผ ํ์ง ์์์ ์๋ ์์ต๋๋ค.
๊ทธ๊ฒ์ ์๋ํ๊ณ ๋ค์ ํ ์คํธํ๊ณ ๋ด์ผ ๊ทธ๊ฒ์ ๋์ง ๊ฒ์ด๊ณ , ์ฐ๋ฆฌ๊ฐ ํต์ฌ ๋ฆด๋ฆฌ์ค๋ก ๋์๊ฐ๋ ๊ฒ๋ ์ข์ ๊ฒ์ ๋๋ค. :-)
@ChrisMaddock ํ๊ท ํ ์คํธ ์คํ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ดํด๋ณด๊ณ ํ ์คํธ ์คํ ์คํ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ํ๋์ง ์๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๊ฐ ํด๋์ค ๋ด์์ ๊ฐ๋ณ ๋ฉ์๋์ ๋ณ๋ ฌ ์คํ์ ์ฒ๋ฆฌํ ์ ์๋ NUnit ๋ฒ์ ์ ๊ธฐ๋ค๋ ค์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@julianhaslinger๊ฐ ๋งํ ๊ฒ์ ์ถ๊ฐํ๊ธฐ ์ํด Selenium ํ ์คํธ์ ํจ๊ป NUnit์ ์ฌ์ฉํ ๋ ์ ํํ ๋์ผํ ๋ฌธ์ ๋ฅผ ๋ณด์์ต๋๋ค. ์ง๊ธ์ ๋ณ๋ ฌ ํ ์คํธ๋ฅผ ์คํํ ์ ์๋๋ก ์ ๋ฌ๋ ์ด์ ๋ธ๋ฆฌ์์ ์คํฌ๋ฉํ ๋จ์ผ ํ ์คํธ์ ๋ํด nunit-console.exe์ ๊ฐ๋ณ ์ธ์คํด์ค๋ฅผ ์คํํ๋ ์ฌ์ฉ์ ์ง์ ๋ํผ๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค. ์ด๊ฒ์ ๋จ์ผ .xml ์ถ๋ ฅ์ด ์๋ ๋ง์ .xml ์ถ๋ ฅ ํ์ผ(๊ฐ ํ ์คํธ ์คํ์ ๋ํด ํ๋์ฉ)์ด ์์ฑ๋๊ณ _OneTimeSetUp_ ๋ฐ ํด์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋์ ์ธ๋ถ ์ธ๋งํฌ์ด์ ์์กดํด์ผ ํจ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ์ด์์ ์ด์ง ์์ต๋๋ค. ํ ๋ฒ๋ง ์คํํ๋ ค๋ ์คํ ํ๋ฆ์ ์ ์ดํ๋ โโํ๊ฒฝ ๋ณ์. ๋๋ ์ค๋ซ๋์ NUnit์์ ๋ณ๋ ฌ ์คํ์ ํ๋ค๋ ์ฝ์์ ๋ฐ๋๊ณ 3.0์์ ์ด ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ์ถ์๋์๋์ง์ ๋ํด ๋งค์ฐ ์ค๋งํ์ต๋๋ค(๋ถ๋ถ์ ์ผ๋ก๋ง ์ง์๋๋ฉฐ ๋ฌธ์ ๋ฐ ๋ฆด๋ฆฌ์ค ์ ๋ณด์ ๋ํ ์ค์ง์ ์ธ ํ๊ณ ๊ฐ ํ์ํจ). ๋ชจ๋ ๊ฒ์ด ์ค์ ๋ก ์ง์๋๋ ๊ฒ์ ์๋์ ๋ฐ๊ฒฌ). ๋๋ ์ด๊ฒ์ ์์ผ๋ก ๋์๊ฐ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๊ฒ์ ์กฐ์ฌํ๊ธฐ๊น์งํ์ง๋ง ๋ถํํ๋ NUnit์ ๋์์ธ์ด ํ ์คํธ ๋ฐฉ๋ฒ ์์ค์์ ๋ณ๋ ฌ ์คํ ๊ตฌํ์ ๋ฐ๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์ค์ ๋ก ์ด๋ป๊ฒ ํ์๊ฒ ์ต๋๊น? ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ ์ฝ๋์ ๊ฐ๋ฅ์ฑ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ ํ ์ผํ์ฑ ์ค์ ๋ฐ ๋ถํด ์ ํ ๋ฐฉ๋ฒ์ ํ ๋ฒ๋ง ์คํํ๋ ค๊ณ ํจ) ์ด๋ฏธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก ์ด ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ๋ ์๊ฐ์ ์ ๋นํํ ์ ์์ต๋๋ค. GitHub์์ ํ๊ณผ ํ๋ ฅํ์ฌ ๋ณ๋ ฌ ์คํ์ ๊ตฌํํ๋๋ก ์ง์). ์ด์จ๋ ... ์ด์ง๋ฝ๊ฒ ํด์ ์ฃ์กํฉ๋๋ค... C# ์ฝ๋์ ๋จ์ ํ ์คํธ์ ๋ํ ์ฐ์ ์์๊ฐ ๋ฉ์๋ ์์ค ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๊ทธ๋ค์ง ์์กดํ์ง ์๋๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง Selenium ๊ธฐ๋ฐ ํ ์คํธ์ NUnit์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ์ํด ์์๋์ญ์์ค. ๊ทธ๊ฒ์ ์์ฒญ๋ ๊ฐ์ ์ด ๋ ๊ฒ์ ๋๋ค. ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! :์๋ค:
๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฌ๊ธฐ์ ์ข ํค๋งค๊ฒ ๋ ๊ฒ ๊ฐ์์...
์ฌ๋๋ค์๊ฒ ๋ฌด์์ด ํ์ํ์ง, ์ ํ์ํ์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ ๋ ์น ๊ฐ๋ฐ์๊ฐ ์๋๋ผ Selenium ์ฌ์ฉ์์ ๋ง์ ๊ฒฝ์ฒญํ๊ณ ๊ทธ๋ค์ด ์ํ๋ ๊ฒ์ ์ง์คํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค. ํ ์คํธ ์ผ์ด์ค ์ฌ์ด์ ์์๊ฐ ์๋ ๋ณ๋ ฌ ๊ณ ์ ์ฅ์น์ธ ๊ฒ ๊ฐ์์ต๋๋ค. ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ค๋ฅธ ๊ฒ์ ์ํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์ถฉ๋ถํ ์ดํดํ์ง๋ง ๋ ๊ทธ๋ฃน์ด "Selenium ์ฌ์ฉ์๊ฐ ํ์๋กํ๋ ๊ฒ"์ ํํํ๋ ๊ฒ์ผ๋ก ํํํ๋ฉด ์ฝ๊ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ๋ฏธ๋ฆฌ ์ ์๋ ์์๋ก ๋ฉ์๋๋ฅผ ์คํํ๋ ค๋ ์ฌ๋๋ค๊ณผ ๋ฌ๋ฆฌ ์ด๋ค ์ข ๋ฅ์ ์น ํ ์คํธ๊ฐ ๋ฉ์๋ ์์ค ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ์๋์ง ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ ์ ์์ต๋๊น? ์ถ์ธกํ ์๋ ์์ง๋ง ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ๊ด๋ จํ์ฌ... ๋ณ๋์ ํ ์คํธ ์ด์ ๋ธ๋ฆฌ ์ฌ์ฉ์ ๊ณ ๋ คํ์ต๋๊น? NUnit์ ๊ฐ๋ณ ํ๋ก์ธ์ค์์ ๊ฐ๊ฐ์ ๋ณ๋ ฌ๋ก ์คํํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๋ฌผ๋ก ๊ทธ๋ ๋ค๊ณ ํด์ ํ์ผ๊ณผ ๊ฐ์ ๊ฒ์ ๋ํ ์ก์ธ์ค๋ฅผ ๋๊ธฐํํ ํ์๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค.
์ค๋ ๋ ์์ ๊ณผ ๊ด๋ จํ์ฌ - ์ฐ๋ฆฌ๋ ๋ณ๋ ฌ ๊ตฌํ์ด ์ค๋ ๋ ์์ ์ ๋ํ ์ฑ ์์ ์ง๋๋ก ๊ณํํ์ง ์์์ต๋๋ค. ๋ด๊ฐ ๋ณด์ฆ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์๋ค์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋น์ ์ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ์ค๋ ๋ ์์ ํ์ง NUnit๊ณผ ์ด๋ค ์ค๋ ๋ ์์ ๋ฌธ์ ๋ฅผ ๋ง๋ค ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๊ทธ ์์ฒด๋ก ์ฌ์ํ์ง ์์ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค.
์๋ตํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ ๋ํ ๊ทํ์ ์๊ฒฌ์ ์์ ํ ์ดํดํฉ๋๋ค.
ํฝ์ค์ฒ์์ ํ
์คํธ ์คํ ์์ ์ง์ ๋ฐ ํ
์คํธ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ถํ
์ด์
๋ธ๋ฆฌ.
์ ๋ ์ด๋ฏธ NUnit ์ฌ์ฉ์์ด๋ฉฐ ๋ช ๋
๋์(๊ทธ๋ฆฌ๊ณ ๊ทธ ์ ์๋ JUnit๋ ์ฌ์ฉํ์ต๋๋ค)
๊ทธ๋์ ํฝ์ค์ฒ์์ ํ
์คํธ ์์์ ์์กดํ๋ค๋ ์์ด๋์ด๋ ์ฌ์ง์ด
๋ด ํ
์คํธ ๋์์ธ์์ ๊ณ ๋ คํ์ญ์์ค. ๊ฐ ํ
์คํธ๋ ์์ ํ ์บก์ํ๋ฉ๋๋ค.
์์์ ๋ํ ๊ธฐ๋ ์์ด ์ฌ์ดํธ ๋ด์์ ์์
๋๋ ์ผ๋ จ์ ์์
์คํ. ๋ด๊ฐ ํ
์คํธํ๋ ์ฌ์ดํธ์ ๋์์ธ์ ๋ํ ๋ง์ ํ
์คํธ๊ฐ
์คํํ๋ ๋ฐ ์ต๋ 20๋ถ์ด ์์๋ ์ ์์ต๋๋ค(์ด ์๊ฐ์ ๋๋ถ๋ถ์
์ฌ์ดํธ์์ ๋ฐ์ํ๋ ์ผ) ๋ฐ ํ
์คํธ ์ ํ์ด ํฌํจ๋ฉ๋๋ค.
์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ธฐ๋ณธ ํ
์คํธ ํด๋์ค๊ฐ ํ์ฉ๋๋๋ก ์ฌ๋ฌ ์ ์ฌํ ์๋๋ฆฌ์ค
๊ณตํต ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ฐ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ ํฅ์
ํ๋ ์์. ํ
์คํธ๋ ๊ฐ๋ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๋์ ํ๋ก์ ํธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํด๋น ์์ญ์ ํ ์์ ๊ถ(๋ฐ๋ผ์ ๋ณ๋์ ์ด์
๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง๋ง
์ด์
๋ธ๋ฆฌ๋น ๋ง์ ํ
์คํธ๊ฐ ์์ผ๋ฉฐ ๋ด ํ
์คํธ ๋ํผ๊ฐ
์ด์ ์ ์์ฑ๋ ๋๋ก ๋ณ๋ ฌ๋ก ์ด์
๋ธ๋ฆฌ์์ ํต๊ณผ๋ ๋ชจ๋ ํ
์คํธ
NUnit 3์ ์ฒซ ๋ฒ์งธ ๊ณต์ ๋ฆด๋ฆฌ์ค์ด๋ฉฐ ๋ชจ๋ ํ
์คํธ๊ฐ
์ถฉ๋ถํ ์ค๋ ๋๊ฐ ์ฃผ์ด์ง๋ฉด ๋์์ ์คํ๋ ๊ฐ๋ฅ์ฑ
์ฌ์ฉ ๊ฐ๋ฅ).
๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ ์ด์
๋ธ๋ฆฌ์ 10๊ฐ์ ํ
์คํธ๊ฐ ์๊ณ
๋ ๋ค๋ฅธ 100๊ฐ์ ํ
์คํธ๋ฅผ ์ํํ์ง๋ง 10๊ฐ๊ฐ ์๋ ์ด์
๋ธ๋ฆฌ์๋ 10๋ถ์ด ์์๋๋ ํ
์คํธ๊ฐ ์์ต๋๋ค.
๊ฐ๊ฐ 100๊ฐ๊ฐ ํฌํจ๋ ์ด์
๋ธ๋ฆฌ์๋ ๊ฐ๊ฐ 1๋ถ์ด ์์๋๋ ํ
์คํธ๊ฐ ์์ต๋๋ค. ๋ง์ฝ ๋ด๊ฐ
110๊ฐ์ ๋ณ๋ ฌ ์ค๋ ๋(์ค์ ๋ก๋
์ธํ๋ผ ์ค๊ณ์ ์ผ๋ถ) ๊ทธ๋ฌ๋ฉด ํ
์คํธ๊ฐ ์๋ฃ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
100๋ถ์ด ์๋๋ผ 10๋ถ ์์.
์ด๊ฒ์ด ์ค๋ช
์ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค... ์ํฉ์ด ์ฌ์ ํ ์์ ํ ๋ช
ํํ์ง ์์ ๊ฒฝ์ฐ ์ฃ์กํฉ๋๋ค.
ํ์ง๋ง ์ ๋ฐ์ ์ธ ์์ ์ ๋ฉ์๋ ์์ค ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ
๋ค๋ฅธ ํ
์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: ruby์ prspec)์์ ๋๋ฝ๋ ๊ฒฝ์ฐ
๋๋ ๊ทธ๊ฒ์ ์ถ๊ฐํจ์ผ๋ก์จ ๊ฐ์ง ์ฑ๋ฅ ๊ฐ์ ์ ๋ถ์์ ์ํ
์ค์ํ ๊ธ์ ์ ์ธ ๋ณํ๊ฐ ๋ ์ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ ์ฐธ์กฐํ์ญ์์ค.
https://github.com/bicarbon8/rspec-parallel/wiki/Examples
2016๋
7์ 1์ผ 00์ 45๋ถ์ "CharliePoole" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฌ๊ธฐ์ ์ข ํค๋งค๊ฒ ๋ ๊ฒ ๊ฐ์์...
์ฌ๋๋ค์๊ฒ ๋ฌด์์ด ํ์ํ์ง, ์ ํ์ํ์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ ๊ฒ
์น ๊ฐ๋ฐ์ ๋ณธ์ธ๋ Selenium ์ฌ์ฉ์์ ๋ง์ ๋ฃ๊ณ ๋ฌด์์ ์ง์คํ๋ ค๊ณ ํ๋์ง
๊ทธ๋ค์ ์ํ๋ค. ์ฃผ๋ฌธ๊ณผ ๋ณํํ๋ ๊ฒ ๊ฐ์๋ ๊ฒ์
ํ
์คํธ ์ผ์ด์ค ์ค์์. ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ํ๋ ๊ฒ์ ์ถฉ๋ถํ ์ดํดํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ ๊ทธ๋ฃน์ด ์์ ์ ํํํ๋ ๊ฒ์ผ๋ก ์ ์ํ ๋
"์
๋ ๋ ์ฌ์ฉ์๊ฐ ํ์๋ก ํ๋ ๊ฒ"์ ์ฝ๊ฐ ํผ๋์ค๋ฝ์ต๋๋ค. ๋น์ ์ ๋๋ฅผ ์ํด ๊ฐ์๋ฅผ ํ ์ ์์ต๋๋ค
์ด๋ค ์ข
๋ฅ์ ์น ํ
์คํธ๊ฐ ๋ฉ์๋ ์์ค ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ ์์ต๋๊น?
๋ฏธ๋ฆฌ ์ ์๋ ์์๋ก ๋ฉ์๋๋ฅผ ์คํํ๋ ค๋ ์ฌ๋๋ค? ๋๋ ๋ด๊ฐ ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค
์ถ์ธกํ์ง๋ง ๋๋ ์ฌ์ฉ์๋ก๋ถํฐ ๊ทธ๊ฒ์ ๋ฐ๊ณ ์ถ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ๊ด๋ จํ์ฌ ... ๋ณ๋์ ํ
์คํธ ์ฌ์ฉ์ ๊ณ ๋ ค ํ์ต๋๊น?
์ด์
๋ธ๋ฆฌ? NUnit์ ๊ฐ๊ฐ์ ๋ณ๋์ ๋ณ๋ ฌ๋ก ์คํํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
ํ๋ก์ธ์ค. ๋ฌผ๋ก ์ก์ธ์ค๋ฅผ ๋๊ธฐํํ ํ์๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค.
ํ์ผ ๊ฐ์ ๊ฒ๋ค.
์ค๋ ๋ ์์ ์ฑ ๊ด๋ จ - ์ฐ๋ฆฌ๋ ๋ณ๋ ฌ ๊ตฌํ์ ๊ณํํ ์ ์ด ์์ต๋๋ค.
์ค๋ ๋ ์์ ์ฑ์ ๋ํ ์ฑ
์์ ์ง๋๋ค. ๋ด๊ฐ ๊ธฐ๋ํ๋ ์ ์ผํ ๊ฒ์
๋ณด์ฅ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ NUnit์ด ์ค๋ ๋ ์์ ๋ฌธ์ ๋ฅผ _์์ฑํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค.
๋ฉ์๋๋ ์ด๋ฏธ ์ค๋ ๋๋ก๋ถํฐ ์์ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ทธ ์์ฒด๋ก ์ฌ์ํ์ง ์์ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค.
โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/nunit/nunit/issues/164#issuecomment -229819324 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe/ACNsyoczCUV9L7kbF2SHB7lLsyBKlrv9ks5qRFUJgaJpZM4CUZ8r
.
์ ๋ณด ๊ฐ์ฌํฉ๋๋ค... ๋ค์ํ ๊ด์ ์ ๋ณผ ์ ์์ด์ ๋์์ด ๋ฉ๋๋ค.
๋ด 5์ผํธ.
์ฐ๋ฆฌ ํ๋ก์ ํธ์๋ ~25๊ฐ์ ํ ์คํธ ์ด์ ๋ธ๋ฆฌ์ ์ด์ ๋ธ๋ฆฌ ๋ฐ ๊ณ ์ ์ฅ์น๋น ํ ์คํธ์ ๋ณ๋ ฌ ํ ์คํธ ์คํ์ด ์ด๋ฏธ ์คํ ์๊ฐ์ ํฌ๊ฒ ์ค์์ต๋๋ค. ํฝ์ค์ฒ ๋ด์์ ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ฉด ํจ์ฌ ๋ ํฅ์๋ฉ๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์คํ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋๋ถ๋ถ์ ์๊ฐ์ด ์์๋๋ ๊ณ ์ ์ฅ์น๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๊ณ ์ ์ฅ์น๋ก ๋ถํ ํฉ๋๋ค. ๊ทธ๋ฌ๋ nunit์ด ๊ณ ์ ์ฅ์น ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ฉด ํจ์ฌ ๋ ์ข์ ๊ฒ์ ๋๋ค.
nunit์์ ๋ด๊ฐ ์ ๋ง๋ก ๋ณด๊ณ ์ถ์ ๊ฒ์ ํ ์คํธ ์ผ์ด์ค ์์ค์ ํ ์คํธ ๋ณ๋ ฌํ์ ๋๋ค. ์๋ํ๋ฉด ๊ทธ๋ฌํ ํ ์คํธ๋ฅผ ๊ณ ์ ์ฅ์น๋ก ๋ถํ ํ๋ ๊ฒ์ด ํญ์ ํธ๋ฆฌํ์ง ์๊ณ ์ฝ๋ ์ค๋ณต์ผ๋ก ์ด์ด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ต๋ ์์ฒ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค(๊ฐ ์ผ์ด์ค ์คํ์ ๋น ๋ฅด์ง๋ง ์ด ๋ช ๋ถ์ด ์์๋จ) ๋๋ ์์ญ ๊ฐ์ ์ผ์ด์ค(๊ฐ ์ผ์ด์ค๋ ๋๋ฆผ)๋ฅผ ์ํํ ์ ์๋ ์ฌ๋ฌ ํ ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ํ์ฌ๋ก์๋ ์ด๋ฌํ ํ ์คํธ๊ฐ ์ฃผ์ ์ผ ์คํ ํผ์ ๋๋ค. ์ฐ๋ฆฌ๋ฅผ.
์ ๋ ฅํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค... ์ด ๋ถ๋ถ์ ์ผ๋ถ ํ ์คํธ๊ฐ ์๋ก ๋ณ๋ ฌ๋ก ์คํ๋์ง ์๋๋ก ํ๋ ๊ฒฝ์์ ์ด์ง๋ง ๋ณด์์ ์ธ ๋ฌธ์ ์ ํจ๊ป ๋ค์ ๋ฆด๋ฆฌ์ค์์ ๋ค๋ฃจ๊ฒ ๋ ์์ญ์ ๋๋ค!
๋ด ์ด์ ์ง๋ฌธ์ ํนํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ ๋ ์ฌ๋๋ค์ด ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ดํ ๊ฒ์ด์์ต๋๋ค. ์ด๋ค ์ฌ๋๋ค์ ๊ฐ ๋ฐฉ๋ฒ์ด ์์ํ๋ ๋จ๊ณ๋ฅผ ์ํ๊ณ ๊ณ ์ ์ฅ์น๊ฐ ์ผ๋ จ์ ๊ทธ๋ฌํ ๋จ๊ณ๋ฅผ ๋ํ๋ด๊ธฐ๋ฅผ ์ํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ์ด๊ฒ์ ๋ฌผ๋ก ์ ์์ ํํํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ํ ์คํธ ์์๋ฅผ ์ง์ ํ์ง ์๊ณ ๋งค์ฐ ์ ์ฌํ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ด ์๊ฐ์ ํ์ ๊ทธ๋ฃน์ ์ผ๋ จ์ ์์ ๊ณผ ๊ฐ๊ฐ์ ์ฃผ์ฅ์ ํฌํจํ๋ ๋ ํฐ ํ ์คํธ ๋ฐฉ๋ฒ์ ์์ฑํฉ๋๋ค.
@CharliePoole ์ข์ ์์์ ๋๋ค! ์ ๋ง ๊ณ ๋ง์ต๋๋ค!
๋ด ์๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ ๊ฒฉ๋ฆฌ๋์ด์ผ ํ๊ณ ๋ค๋ฅธ ํ ์คํธ ์ผ์ด์ค๋ ์คํ ์์์ ์์กดํ์ง ์์์ผ ํฉ๋๋ค. ์ฌ๋๋ค์ด ์ฌ์ ํ ๋จ์ผ ์ค๋ ๋๋ก ์ผ๋ถ ํ ์คํธ๋ฅผ ์คํํ๋ ค๋ ๊ฒฝ์ฐ [Parallelizable(ParallelScope.None)] ๋ฐ/๋๋ OrderAttribute๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ตฌํ ์ค์ธ ์ด ๋ฌธ์ ๋ฅผ ํตํด ๋ก์ปฌ ์น๋๋ผ์ด๋ฒ ๊ทธ๋ฆฌ๋ ๋๋ BrowserStack ๋๋ SauceLabs์ ๊ฐ์ Saas ๊ณต๊ธ์์ ๋นํด ํ ์คํธ ์ค์ํธ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์คํํ ์ ์์ต๋๋ค. ํ์ฌ ์ ๋ ํ ์คํธ ํด๋์ค์ ํ ์คํธ ๋ฉ์๋์ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์น ๋๋ผ์ด๋ฒ ๋ ธ๋ ๋๋ ๋ธ๋ผ์ฐ์ ์ธ์ ์ ์๋ก ์ ํํ๋ ค๊ณ ์๋ํ๋ฏ๋ก ๊ทธ๋ฆฌ๋๊ฐ ์์ ํ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์๊ณ ํ ์คํธ์ 8๊ฐ์ ํ ์คํธ ๋ฉ์๋๊ฐ ์๊ณ ๋ด ๊ทธ๋ฆฌ๋์ ์ฌ์ฉ ๊ฐ๋ฅํ 8๊ฐ์ ๋ธ๋ผ์ฐ์ ์ธ์ ์ด ์๋ ๊ฒฝ์ฐ ํด๋์ค์ ๋ชจ๋ ํ ์คํธ ๋ฉ์๋๊ฐ ํ ๋ฒ์ ํ๋์ฉ ์คํ๋๊ธฐ ๋๋ฌธ์ ํ๋๋ง ์ฌ์ฉ๋ฉ๋๋ค.
@pablomxnl ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ฝ์น ๋๋ ํ๋ก์ ํธ ๋ฆฌ๋๋ก์ ์ ๋ ํญ์ ๊ทธ ์์ด๋์ด๋ฅผ ๋งค์ฐ ์ด์ฌํ ์ถ์งํด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฌ๊ธฐ์์ ๊ทธ ๋ชจ์๋ฅผ ์ฐ์ง ์์ต๋๋ค. ๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ์๊ตฌํ๋ ์ฌ์ฉ์์ ์ํํธ์จ์ด ์ ๊ณต์์ ๋๋ค. ๊ทธ๋ค์ด ์ ๋ง๋ก ์ง๋ ํ ๊ฒ์ ์๊ตฌํ๋ค๋ฉด, ๋๋ ๊ทธ๋ฅ ์๋๋ผ๊ณ ๋๋ตํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ด ์ด๋ค ์ํฉ์์๋ ํฉ๋ฆฌ์ ์ธ ๊ฒ์ ์๊ตฌํ์ง๋ง ๋ค๋ฅธ ์ํฉ์์๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ(๋๋ถ๋ถ์ด ์๋ ๊ฒฝ์ฐ์๋) ๊ณ ๋ คํฉ๋๋ค.
์น ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๊ฑฐ์ ํญ์ ๋จ์ ํ ์คํธ์ ๋ํด ์ด์ผ๊ธฐ ํ์ง ์์ต๋๋ค . ๋ ๋์ ์์ค์ ๊ธฐ๋ฅ ํ ์คํธ์๋ ์ข ์ข ์ํ์ฑ์ด ํ์ํฉ๋๋ค. ํ ์คํธ์ ์ผ๋ จ์ ๋จ๊ณ๋ฅผ ํตํด ์ํ๋๋์ง ์ผ๋ จ์ ๋ฐฉ๋ฒ์ ํตํด ์ํ๋๋์ง ์ฌ๋ถ๋ ์ฐ๋ฆฌ์๊ฒ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ด๊ณ ์ฌ์ฉ์์๊ฒ๋ ํธ์ ๋ฌธ์ ์ ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ ์๋ง๋ [StepFixture] ํด๋์ค ์์ ์๋ [Step]์ด๋ผ๋ ๊ฒ์ด ํ์ํ๊ฑฐ๋ ์ด์ ์ ์ฌํ ์ด๋ฆ์ด ํ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ผ ์ด ๋ชจ๋ ์์/์ํ์ฑ ํญ๋ชฉ์ ๋จ์ ํ ์คํธ์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์๋ง๋ ์น์ด ์ฃฝ๊ธฐ ์ ์ ๊ทธ๋ ๊ฒ ํ ์๊ฐ์ด ์์ ๊ฒ์ ๋๋ค. :-)
์ด์จ๋ ์ฌ๋๋ค์ด ์ฌ๋ฌ๋ถ์ ์ํํธ์จ์ด๋ฅผ ์ค์ ๋ก ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๋ฐฐ์ฐ๋ ๊ฒ์ ํญ์ ํฅ๋ฏธ๋กญ์ต๋๋ค.
@CharliePoole , ๋ค์๊ณผ ๊ฐ์ด ์ง๋ฌธํ์ฌ ์ ๋ฅผ ์คํดํ์ง ๋ง์ญ์์ค. ์ด ๊ธฐ๋ฅ์ด ๋ค์ ๋ฒ์ (3.5, 2016๋ 9์ 29์ผ๊น์ง)์ ์ถ๊ฐ๋๋์?
๋ด๊ฐ ๋ฏธ๋๋ฅผ ์์ธกํ๋ ์ฒ ํ ์๋ ์์ง๋ง, ๊ทธ๊ฒ์ 9์๊น์ง๋ง ๋น์ ์ ๋ง์กฑ์ํฌ ๊ฒ์ ๋๋ค. :-)
๊ธฐ๋ฅ์ "์์ฝ"ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ฌ ๋ต๋ณํ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ์ฌ ๋ถ๊ธฐ์ ํ ๋ฒ ๋ฆด๋ฆฌ์ค๊ฐ ๋์ค๋ ์ ๊ทผ ๋ฐฉ์์ (์ฐ์ด๋ถํฐ) ์๋ํ๊ณ ์์ต๋๋ค. ์ถ์๋ฅผ ๋ ์ํ๊ฒ ๋๋ฉด ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ ์ง์์ ์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์์ ๋ด์ฌ ์คํ ์์ค ํ๋ก์ ํธ์์ ๋งค์ ์ฌ์ฉํ ์ ์๋ ๊ณ ์ ๋ ์์ ๋ ธ๋ ฅ์ ์์ต๋๋ค. "์ด์ ๋ ์จ" ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฌ๋๋ค์ด NUnit์ ์๋นํด์ผ ํ๋ ์๊ฐ๊ณผ ์์ ๋ด์ฌ ์ธ์ ์๋ ๋งค์ฐ ๋ค์ํฉ๋๋ค.
ํํ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ฆด๋ฆฌ์ค์ ํต์ฌ์ด ๋๋ ์์์ ๋ฌธ์ ๋ฅผ ์ ํํ์ฌ ๋ฏธ๋ฆฌ ์ด์ ํ์ ์ถ๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ ํธํ๋ ๊ฒ์ ์๋ฃ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ฒ์ ์ฝ 25% ์ด์์ ์ถ๊ฐํ์ง ์๋ ๊ฒ์ ๋๋ค. ๋ฆด๋ฆฌ์ค์ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ ์์ ์ด ์๋ฃ๋ ํ ๋๋ ๊ธฐ๊ปํด์ผ ๋๊ตฐ๊ฐ๊ฐ ์์ ์ ์ ๋ ํ ๋๋ง ํด๋น ์ด์ ํ์ ์ถ๊ฐ๋ฉ๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ํ ๋น๋์ง ์์ ์ํ์์๋ ์ผ๋ฐ์ ์ผ๋ก 3.5 ๋ง์ผ์คํค์์ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋ฌด์ธ๊ฐ ๋ค๋ฅธ ์์ ์ ๋ฐฉํดํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒฝ์ฐ ๊ฐ๋ ํ์ธํฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ์ ๊ธ์ ์ ์ธ ์ธก๋ฉด์ ๋ฆด๋ฆฌ์ค๊ฐ ์ ์๊ฐ์ ๋์ฌ ๊ฒ์ด๋ผ๊ณ ์ฌ์ค์ ๋ณด์ฅํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ถ์ ์ ์ธ ์ธก๋ฉด์ ๊ทธ ์์ ๋ฌด์์ด ๋ค์ด ์๋์ง ๋งํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. :-(
์ด ํน์ ๋ฌธ์ ์ ๋ํด... ์ ๋ ์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ค์๊ฒ ์ด๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํด ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ต๋๋ค. ๋๊ตฐ๊ฐ๋ ์์ ๋กญ๊ฒ ์์ ํ ์ ์์ด์ผ ํ๋ฉฐ ์ด ๋ฒ์์ ์ด๋ ค์์ ํ๋ก์ ํธ์ ๋ํ ์ถฉ๋ถํ ๋ฐฐ๊ฒฝ โโ์ง์์ด ์์ด์ผ ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ๋๊ตฐ๊ฐ๊ฐ ์์ผ๋ก ๋ช ์ฃผ ์์ ์ด๊ฒ์ ์ ํํ๋ค๋ฉด, ๋๋ ๊ทธ๊ฒ์ด ๋ฆด๋ฆฌ์ค๊น์ง ์๋ฃ๋ ์ ์๋ค๊ณ ์ถ์ธกํ ๊ฒ์ ๋๋ค. ์ฐธ๊ณ ๋ก ์ ๋ ๋ค๋ฅธ ์ผ์ ํ๋ฉด์ ์ด ์ผ์ ํ๋ ๋ฐ ํ ๋ฌ ์ ๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์์.
์ฃ์กํ์ง๋ง ๋ ์ด์ ํ์คํ ๋ต๋ณ์ ์์ง๋ง ๊ทธ๋ฌํ ๋ต๋ณ์ ๋ฐ๋์ ๊ฑฐ์ง๋ง์ด ๋ ๊ฒ์ ๋๋ค!
@CharliePoole ์ด ๊ธฐ๋ฅ์ ๊ณ ๋ คํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
@tomersss ์ฐ๋ฆฌ๋ ์์ง ์ด๊ฒ์ ๋ํ ์์ ์ ์์ํ์ง ์์์ผ๋ฉฐ 3.5๊ฐ ๋ช ์ฃผ ์์ ๋์ค๊ธฐ๋ฅผ ํฌ๋งํ๋ฏ๋ก ๋ค์ ๋ฆด๋ฆฌ์ค์๋ ์์ ๊ฒ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ๊ณง ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ง๋ง ์ด๋ฒ ์ฃผ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฝ๋ ๊ธฐ๋ฐ์ ์ฌ๊ตฌ์ฑํ๋๋ผ ๊ฝค ๋ฐ๋นด์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ ์ฐ์ ์์๋ก ํ์๋์ด ์์ผ๋ฏ๋ก ๋ ์ด๋์ ์์ต๋๋ค.
@CharliePoole ์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
@KPKA ์์ง ์์ ์ ์์ํ์ง ์์์ผ๋ฏ๋ก ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๋ค. ZenHub๊ฐ ์ค์น๋ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์ด ๋ฌธ์ ๊ฐ ์์ ์ ์์ํ๋ฉด์ Backlog์์ ToDo๋ก ์ด๋ํ ๋ค์ In Progress๋ก ์ด๋ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Zenhub๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋ฌธ์ ์ ํ ๋น๋ ์ฌ๋์ ๋ณด๋ฉด ๋๊ฐ ๊ทธ๊ฒ์ ์ ํํ๋์ง ์ ์ ์์ต๋๋ค.
@CharliePoole @rprouse
์๋ ํ์ธ์!
์ด ๋ฌธ์ ์ ๋ฐ๋ฅธ ์์์ด ์์ต๋๊น?
๋ค์ ๋ฆด๋ฆฌ์ค์ ํฌํจ๋ ๊ฒ์ธ์ง ์๋๋ฉด ๋ค๊ฐ์ค๋ ์ด์ ํ ์ค ํ๋์์ ๊ณํ๋ ๊ฒ์ธ์ง?
ํ์ฌ ์ด๊ฒ์ด NUnit์ผ๋ก ์ ํํ๋ ๊ฒ์ ๋ฐฉํดํ๋ ์ ์ผํ ๋ฌธ์ ์
๋๋ค.
๋ง์ ์ฌ๋๋ค์ด ์ํฅ์ ๋ฐ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊น์ด ์์ผ ๋ด์ ๋๊ตฐ๊ฐ๊ฐ ์์ ์ ๊ณ ๋ฐฑํ์ฌ ์ด ์ผ์ ์ฐฉ์ํ ์ ์๋ค๋ฉด ์น์ ํ ๊ฒ์
๋๋ค.
๊ณง ์์์ ๋ค์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@GitSIPA ํ ์คํธ ๋ฐฉ๋ฒ์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋๋ก ์ด๋ค ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
๊ทํ์ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด ์๋ฌด๋ ์ด ๋ฌธ์ ์ ๋ํด ์์ ์ ์์ํ์ง ์์์ผ๋ฏ๋ก ETA๋ ์์ง๋ง ๋ค์์ ์์ ํ ์์ ์ ๊ฒฐ์ ํ ๋ ๊ทํ์ ํฌํ๋ฅผ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค.
+1, @GitSIPA์ ๋์ํฉ๋๋ค. ์ ๋ง ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค
@GitSIPA +1
@rprouse ์ฐ๋ฆฌ๋ mbunit์ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ด ํ๋ ์์ํฌ๋ ์ง๊ธ ์ง์ํ์ง ์์ต๋๋ค. mbunit์ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@rprouse ์ ํฌ๋ ํ์ฌ MbUnit์ ์ฌ์ฉํ๊ณ ์์ง๋ง ์๋ก์ด Visual Studio ๋ฒ์ ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ NUnit์ผ๋ก์ ์ ํ์ ๊ณ ๋ คํ์ต๋๋ค.
๋ฌธ์ #1921์์ @jnm2 ๋ "์ฐ๋ฆฌ์ ๋งค๊ฐ๋ณ์ํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ ๊ฒ ์ฌ์ด์ ์ด๋ค ์ฐจ์ด๊ฐ ์์ต๋๊น? ์ ๊ฐ ๊ธฐ์ฌํ ์ ์์ต๋๊น?"๋ผ๊ณ ๋ฌผ์์ต๋๋ค.
๋ ๋ฒ์งธ ์ง๋ฌธ ์ฒซ ๋ฒ์งธ: ํ์คํ! ์ฐ๋ฆฌ๋ ๋น์ ์ ๋์์ ๋ฐ๊ณ ์ถ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ ์ง๋ฌธ์:
์ฐ๋ฆฌ๋ ํ์ฌ ์ผ๋์ผ ํ ์คํธ๋ฅผ ๋งคํํ๋ "WorkItems"๋ฅผ ์คํํฉ๋๋ค. ๊ณ ์ ์ฅ์น์ ๋ํ OneTimeSetUp ๋ฐ OneTimeTearDown์ ์๋น ๋จ๊ณ๋ก ๋ณ๋์ WorkItem์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌธ์ #1096์ ์ด์ ๋ํด ๋ค๋ฃน๋๋ค.
WorkItem์ด ๋ค๋ฅธ WorkItem์ ์ข ์๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ฏ๋ก ์ข ์๋ ํญ๋ชฉ์ด ๋ชจ๋ ์๋ฃ๋ ๋๋ง ์คํ๋๋๋ก ์์ฝ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ CountDown์ ์ฌ์ฉํ์ฌ ๋งค์ฐ ๋จ์ํ ๋ฐฉ์์ผ๋ก ์ด๋ฅผ ์ํํ์ง๋ง ๋ณด๋ค ์ผ๋ฐ์ ์ธ ๊ฒ์ด ํ์ํฉ๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์ OneTimeTearDown์ด ๋ชจ๋ ํ ์คํธ์ ์๋ฃ์ ์์กดํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ๋์ค์ ํ ์คํธ ๊ฐ์ ์ข ์์ฑ์ ๊ตฌํํ ๋ ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ๋ณด๋ฅ ์ค์ธ ์์ ํญ๋ชฉ์ ๋๊ธฐ์ด๋ก ์๊ฐํ์ง๋ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์๋ ์์ต๋๋ค.
์ด ๋ ๊ฐ์ง๋ฅผ ์ ์ธํ๊ณ ์ฃผ์ ๋ฌธ์ ์์ฒด์ ๋ํ ์์ ์ ์์ํ ์ ์์ต๋๋ค. ์ฆ, ๊ณ ์ ์ฅ์น์ ๋ํด OneTimeSetUp์ ์ํํ ๋์ผํ ์ค๋ ๋์์ ํ ์คํธ๋ฅผ ์คํํ๋ ๋์ ์คํํ๋๋ก ํ ์คํธ๋ฅผ ์์ฝํ๋ ๊ฒ์ ๋๋ค.
์ด ์์ ์ ์ํํ๋ ค๋ฉด NUnit์ด ์ค์ ๋ก ์คํ์ ์ํด ํ ์คํธ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ด๋ถ ์ฌํญ์ ๋งค์ฐ ์ต์ํด์ ธ์ผ ํฉ๋๋ค. ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ง๊ธ๊น์ง ์ด๋ค ๊ณํ์ด ์์๋์?
๋ด ์๊ตฌ ์ฌํญ์ CPU๋ฅผ ํฌํ์ํค๊ธฐ ์ํด ๋ณ๋ ฌ๋ก ์ถฉ๋ถํ TestCaseSource ์ผ์ด์ค๋ฅผ ์คํํ๋ ๊ฒ์
๋๋ค. ์ค์ , ๋ถํด ๋๋ ์ฃผ๋ฌธ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ๊ทธ๊ฒ๋ค์ ๊ณ ๋ คํด์ผ ํ ๊ฒ์
๋๋ค.
TestCaseSource ์คํ์ด ๋ณ๋ ฌํ๋ ๊ฒ์ผ๋ก ์์ํ๋ฏ๋ก ๋ค๋ฅธ TestCaseSources๋ฅผ ์ฌ์ฉํ๋ ๋์ผํ ๊ณ ์ ์ฅ์น์ ๋ ๋ฉ์๋๊ฐ ์ด๊ฑฐ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํฉ๋๋ค. ๋ํ ํ ๋ฒ๋ง ์คํ๋๋ค๋ฉด ๋ ๊ฐ์ ๋ฉ์๋๊ฐ ๋์ผํ TestCaseSource๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง: RACE CONDITION์ ๋๊ธ์ ๋ฌ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ข์ ์ถ๋ฐ์ ํ๊ณ ์์ต๋๋ค! ๐
๋ด๊ฐ ์ต๊ทผ์ ๋ง์ด ํด์ผ๋ง ํ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ฐ๋ณตํ ๊ฒ์ด๋ค. :์๋ค:
NUnit์ ๋จผ์ ํ ์คํธ(๋ฐ๊ฒฌ, ํ์)๋ฅผ ๋ก๋ํ ๋ค์ ๋ฌ๋ ์ ํ์ ๋ฐ๋ผ ํ ์คํธ๋ฅผ ํ ๋ฒ ์ด์ ์คํํฉ๋๋ค.
TestCaseSource๋ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋๋ผ ๋ก๋ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ํ ์คํธ์ ๋์ผํ ํด๋์ค์ ์์ ์ ์์ง๋ง ํ ์คํธ์ ์ผ๋ถ๋ก ๊ฐ์ฃผํ์ง๋ ์์ต๋๋ค.
IOW, ํ ์คํธ ์ผ์ด์ค๋ ํ ์คํธ ์ผ์ด์ค ์์ค๋ฅผ "์ฌ์ฉ"ํ์ง ์๊ณ NUnit์ด ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค. ๋ฌผ๋ก ์์ฑ๋ ๋๊น์ง๋ ์๋ฌด ๊ฒ๋ ํ ์ ์์ต๋๋ค. ๋ง์ด ๋ฉ๋๊น?
๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ์์ค์์ ํ ์คํธ ์์ฑ์ด ์์ฐจ์ ์ผ๋ก ์ํ๋ฉ๋๋ค. ๋ฌธ์ ๊ฐ ๋๋ ์์ค์์ ์คํ ์ค์ธ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์ถ์ธก์ ํ ์คํธ ์ผ์ด์ค ์์ค์์ ๋๋ฌด ๋ง์ ์์ ์ ์ํํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํ ์คํธ ์ผ์ด์ค ์์ค์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ฅํ๋ ค๊ณ ํฉ๋๋ค. ๋ถํํ๋ ์ด๊ฒ์ ์ ์ฒด ์ฑ ์ฑํฐ๊ฐ ๋ ์ ์์ต๋๋ค. :์๋ค:
๋ฐ๋ผ์ ์ด ๋ฌธ์ ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณ๋ ฌ๋ก __running__ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ผ๋ถ๋ฅผ ๋ณ๋ ฌํํ ์ ์๋ ๊ฒ์ผ๋ก ํ์ํ์ง ์๋ ํ ๊ณ ์ ์ฅ์น ์๋์ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์๋ฏธํฉ๋๋ค. ๋จ์ํ๊ณ ๋งค๊ฐ๋ณ์ํ๋์ง ์์ ํ ์คํธ์ ๋งค๊ฐ๋ณ์ํ๋ ํ ์คํธ์ ๊ฐ๋ณ ์ฌ๋ก๋ ์ฌ๊ธฐ์์ ๋๋ฑํ๊ฒ ์ทจ๊ธ๋ฉ๋๋ค.
OneTimeTearDown์ด ์๋ ์ค๋น์์ ํ ์คํธ์ ๋ณ๋ ฌํ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ด ์คํ์ด ๋ ๊ฒ์ ๋๋ค(OneTimeSetUp์ด ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค). ๊ทธ ๊ฒฐ์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ด๋ฆด ์ ์๋ค๋ฉด ์ฝ๊ฒ ์๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ OneTimeTearDown์ ์์๋ ๋ฉ์๋์ ์ ์ญ ActionAttributes๋ฅผ ๋ชจ๋ ํฌํจํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ์ ์ด ์๊ฐ๋ณด๋ค ์ด๋ ต์ต๋๋ค.
@jnm2 ์ด๋ฏธ ์ด ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ธฐํ๊ฐ
@julianhaslinger ์๋์. 1885๋ ๊ณผ 1933๋ ์ ๋ ๊ฐ์ง ์ฆ๊ฐ์ ์ธ ๋ฌธ์ ์ดํ์ ๋ด ๋ชฉ๋ก์ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ๋ค๋ฉด ๋์ฑ ์ข์ต๋๋ค!
@julianhaslinger ์๋ก์ ๋ํด ์ ๊ฐ๋น ํ๊ธฐ ํ๋ ์ผ์ด๋ผ๊ณ ๋ง์ https://github.com/nunit/nunit/issues/164#issuecomment -265267804์์ ๋ด ์๊ฒฌ์ ์ฐธ์กฐํ์ญ์์ค. ๋ ๊ฐ๋จํ ์ ๊ทผ ๋ฐฉ์์ด ์๊ฐ๋๋ฉด ์ฝ๋ฉํ๊ธฐ ์ ์ ์ด์ ๋ํด ๊ฒ์ํ๋ฉด ๋ฏธ๋ ์์ธก๊ณผ ๊ด๋ จ๋ ๋ช ๋ฐฑํ YAGNI์ ๋ฏธ๋ ๊ณ ๋ ค ์ฌํญ์ ๋น๊ตํ ์ ์์ต๋๋ค.
@CharliePoole @jnm2 ์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ!
์ด ๋๋ฝ๋ ๊ธฐ๋ฅ์ ๊ตฌํ์ ์์ํ๋ ค๋ ๊ฒ์ด ์๋๋ผ ๋จ์ง ์งํ ์ํฉ์ ๋ํด ์๊ณ ์ถ์์ต๋๋ค. ๊ทํ์ ๋ต๋ณ(์)์์ ์ ์ ์๋ฏ์ด ์ด ํน์ ๊ธฐ๋ฅ ์์ฒญ๊ณผ ๊ด๋ จํ์ฌ ์งํ(?)์ด ์์์ต๋๋ค.
@CharliePoole ์ฝ๋๋ฅผ ์กฐ์ฌํ๋ ๋์ ๋์ผํ Fixture ์ธ์คํด์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ฆ, WorkItem์ด ๋ณ๋ ฌ๋ก ์คํ๋๋ ๊ฒฝ์ฐ ํ ์คํธ ํด๋์ค์ ๋จ์ผ ์ธ์คํด์ค์ ์ก์ธ์คํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ํ ์คํธ๊ฐ ์ธ์คํด์ค ์์ค ํ๋๋ฅผ ์ค์ ํ๊ธฐ ์ํด ์ค์ ๋๋ ํด์ฒด์ ์์กดํ ๋ ์์ฑ๋๋ ๊ฒฝ์ ์กฐ๊ฑด ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
์ด์ ๋ํ ํ ๊ฐ์ง ํด๊ฒฐ์ฑ ์ ๊ฐ WorkItem์ด ํ ์คํธ ํด๋์ค์ ์ ์ธ์คํด์ค์์ ์๋ํ๋๋ก ํ๋ ๊ฒ์ด์ง๋ง, ์ด๋ ๋ ์ด์ ๊ณ ์ ์ฅ์น์ ๋จ์ผ ์ธ์คํด์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ณ ์ ์ฅ์น ์ค์ ์ด ์๋ํ๋ ๋ฐฉ์์ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค
@chris-smith-zocdoc ๋ค, ๊ทธ๊ฒ NUnit๊ณผ ์ ์์ junit์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋๋ค. ๊ณผ๊ฑฐ์๋ ์ฐฌ๋ฐ ์๋ก ์ด ๋๋ฆฌ ๋ ผ์๋์์ง๋ง ์ง๊ธ์ ๋ง์ด ๋์ค์ง ์์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก NUnit ํ ์คํธ๋ ๋ชจ๋ ์ด๊ธฐํ๊ฐ SetUp ๋ฉ์๋์์ ์ํ๋๋ ์ํ ๋น์ ์ฅ์ผ๋ก ๊ฐ์ ๋์์ต๋๋ค.
TestFixtureSetUp(ํ์ฌ OneTimeSetUp์ด๋ผ๊ณ ํจ)์ด ๋์ ๋๋ฉด ๋ ๋น์ผ ์ด๊ธฐํ๋ฅผ ํ ๋ฒ ์ํํ๊ณ ๋ชจ๋ ํ ์คํธ๊ฐ ๋์ผํ ์ด๊ธฐํ ๊ฐ์์ ์๋ํ๋๋ก ํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๊ฒ์ ํ ์คํธ ์ค์ธ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๊ฐ์ฅ ์ ์ฉํ๋ฉฐ, ๊ทธ ์์ฒด๊ฐ ์ํ ์ ์ฅ์ผ ์ ์์ต๋๋ค. ์ต๊ทผ ๋ช ๋ ๋์ ์ ์ ๋ ๋ง์ ์ฌ์ฉ์๊ฐ ์ด ๊ธฐ๋ฅ์ ํ์ฉํ๊ณ ์์ต๋๋ค.
ํ ์คํธ ์ผ์ด์ค๋ณ๋ก ๋ณ๋์ ์ฌ์ฉ์ ํฝ์ค์ฒ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ต์ ์ ์ถ๊ฐํ๋ ์ฃผ์ ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฌ๋ผ์ต๋๋ค. ์์ง๊น์ง ์์ ๋ ๊ธฐ๋ฅ์ ๋จ๊ณ์ ์ด๋ฅด์ง ๋ชปํ์ต๋๋ค. ํ์คํ ์ฌ์ฉ์ ์ธก์ ๋ณ๋ ฌ ๋ฐฉ์ ๊ธฐ๋ฅ์ ์ ์ฉ์ฑ๊ณผ ๊ด๋ จ์ด ์์ง๋ง ๊ตฌํ๊ณผ ์ง๊ตํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ธ์คํด์ค๋น ์ ์กฐ๋ช ๊ธฐ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋จ์ํ "์ผํ์ฑ" ์ค์ ์ ๋ ๋ฒ ์ด์ ์คํํ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ ์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ํฐ ํ๊ฒฉ์ ์ค ๊ฒ์ ๋๋ค. ๐ข
์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ์ด์ ๋ก ๋ณ๋ ฌ ํ ์คํธ ๋ฐฉ๋ฒ์ ์ฐ๊ธฐํ์ต๋๋ค. (1) ๊ตฌํํ๊ธฐ ์ด๋ ต๊ณ (2) ๋ณ๋ ฌ ๊ณ ์ ์ฅ์น๊ฐ ์ฐ๋ฆฌ์๊ฒ๋ ๋ ์ฝ์ง๋ง ๋๋ถ๋ถ์ ์ฌ์ฉ์์๊ฒ๋ ์ถฉ๋ถํฉ๋๋ค. ๋งค์ฐ ์์์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๊ณ ์ ์ฅ์น์์ ์ํ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง(์จ๋ผ์ธ ํ ๋ก ์ ๊ธฐ๋ฐ์ผ๋ก) ๋ง์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ํ ์คํธ ๋ฐฉ๋ฒ์์ ์ํ๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ง๊ธ๊น์ง ๋ง์ ์ฌ์ฉ์๊ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์ฉํ๊ณ ์์ผ๋ฉฐ ์ผ๋ถ ์ฌ์ฉ์๋ ๋ฉ์๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๋งค์ฐ ์ฌํ๊ฒ ์ํ์ง๋ง ์๋์ ์ผ๋ก ์์ ๊ทธ๋ฃน์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ญ๊ฐ๋ฅผ ํด์ผ ํ ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ฒซ ๋ฒ์งธ ๋ถ๊ธฐ ๋์ ์ด ์์ ์ ์ํํ ๊ฒ์ ๋๋ค. ์ต์ํ ๋ช ๊ฐ์ง ์คํ์ ์คํํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด ํ์ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋ ์์ ์ ํฉ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฅํ ์ ์์ ์ ๋๋ก ๋ง์ ๋๋ค.
์ธ์คํด์ค๋น ์ ์กฐ๋ช ๊ธฐ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋จ์ํ "์ผํ์ฑ" ์ค์ ์ ๋ ๋ฒ ์ด์ ์คํํ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ ์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ํฐ ํ๊ฒฉ์ ์ค ๊ฒ์ ๋๋ค.
๋๋ ๋น์ ์ด ๋ณ๋ ฌ๋ก ์คํํ๊ธฐ๋ก ์ ํํ๋ค๋ฉด ์ ์ ์ํ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํผํฉํ์ฌ ๋ฌด์ธ๊ฐ๊ฐ ๋ง๊ฐ์ง๋ฉด ๋น์ ์ ์๋ชป์ด ๋ ์ ๋๋ก ์ ์ ์ํ๊ฐ ์๋๋ก ์๊ตฌํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด ์ข๊ฒ๋ ๋ชจ๋ ์ฝ๋๊ฐ ํ ์คํธ ์ค์ด๋ฏ๋ก ๋์น๊ธฐ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค ๐
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ญ๊ฐ๋ฅผ ํด์ผ ํ ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ฒซ ๋ฒ์งธ ๋ถ๊ธฐ ๋์ ์ด ์์ ์ ์ํํ ๊ฒ์ ๋๋ค. ์ต์ํ ๋ช ๊ฐ์ง ์คํ์ ์คํํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด ํ์ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋ ์์ ์ ํฉ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฅํ ์ ์์ ์ ๋๋ก ๋ง์ ๋๋ค.
์ ๋ฅผ ๊ณ์ฐํด ์ฃผ์ธ์.
๋๋!
2017๋
1์ 14์ผ ํ ์์ผ ์ค์ 3์ 58๋ถ, Joseph Musser [email protected]
์ผ๋ค:
>
>
>
>
[์ด๋ฏธ์ง: ๋ฐ์ค๋น] https://www.boxbe.com/overview
์๋ ์ ๋ฆฌ: ๋ง์ง๋ง 1๊ฐ ์ด๋ฉ์ผ ๋ณด๊ด([email protected])
์ธ์คํด์ค๋น ์ ์กฐ๋ช ๊ธฐ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋จ์ํ "ํ๋"๋ฅผ ์คํํฉ๋๋ค.
์๊ฐ ์ค์ ์ ๋ ๋ฒ ์ด์ ํฉ๋๋ค. ๋ฌผ๋ก ์ด๋
์ ์ ์ ์ฌ์ฉํฉ๋๋ค.๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ ์ ์ํ๊ฐ ์๋๋ก ์๊ตฌํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ณ๋ ฌ ์คํ์ ์ ํํ์ญ์์ค.
์ ์ ์ํ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํผํฉํ๊ธฐ ์ํ ์ค๋จ. ์ด ์ข๊ฒ๋ ์ด ๋ชจ๋ ์ฝ๋๋
ํ ์คํธ ์ค์ด๋ ๋์น์ง ๋ง์ธ์ :D๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ญ๊ฐ๋ฅผ ํด์ผ ํ ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ๋งก์ ๊ฒ์ด๋ค.
1๋ถ๊ธฐ์๋ ์ต์ํ ์ผ๋ถ ์คํ์ ์คํํ๋ ์ ๋๊น์ง
๋ค๋ฅธ ์ฌ๋๋ค์ด ํ ์ ์๋ ์์ ์ ํฉ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค.
ํ์ ์กฐ์น๋ฅผ ์ทจํ์ญ์์ค.์ ๋ฅผ ๊ณ์ฐํด ์ฃผ์ธ์.
โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/nunit/nunit/issues/164#issuecomment-272488655 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAHNVlwVps8pQ93UIwZw6zY7TOyHO0a6ks5rR61EgaJpZM4CUZ8r
.
๋ช ๊ฐ์ง ํ์ด๋ฐ ํ ์คํธ๋ฅผ ์คํํ๋ฉด์ ํฅ๋ฏธ๋ก์ด ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ณ๋ ฌํ ๊ฐ๋ฅํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํธ์ถํ๋ ๋ฐ ๋ชจํธํจ์ด ์์ต๋๋ค. ์ด๊ฒ์ ๋นํ ๋ฐ ๊ธฐํ ์ ํ๊ตฐ์๋ ์ ์ฉ๋ ์ ์์ง๋ง ๋ ๋ช ํํฉ๋๋ค.
๋ฐฉ๋ฒ์ด ์์ ํ ๋ณ๋ ฌํํ ์ ์๋ ๊ฒฝ์ฐ __๋ค๋ฅธ ๋ฐฉ๋ฒ__๊ณผ ๋ณ๋ ฌ๋ก ์คํํ ์ ์์์ ์๋ฏธํฉ๋๋ค. OTOH, ํฝ์ค์ณ ๋ด์์๋ง ๋ณ๋ ฌํํ ์ ์๋ ๊ฒฝ์ฐ __๋์ผํ ํฝ์ค์ฒ์ ๋ค๋ฅธ ๋ฉ์๋์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์์ต๋๋ค.__
์ ๋ ์ด ๊ตฌ๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ ๊ฒ์ ์ ์ํฉ๋๋ค.
ํ ์คํธ ๋ฉ์๋์ Parallelizable ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์ฑ(์: ์ํํธ)์์ ๋ค๋ฅธ ์ค๋ ๋์์ ์คํ๋๋๋ก ํธ์ถํ์ง ์๋ ํ ํฌํจํ๋ ๊ณ ์ ์ฅ์น์ ๋์ผํ ์ค๋ ๋์์ ์คํํด์ผ ํฉ๋๋ค.
๋ฒ์๊ฐ Self์ธ Parallelizable ์์ฑ์ด ์๊ฑฐ๋ ๋ ๋์ ์์ค์ ์ ํ๊ตฐ์ด Children์ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ ํ ์คํธ ๋ฉ์๋๋ ์กฐ๋ช ๊ธฐ์ ๋ค๋ฅธ ๋ฉ์๋์ ๋ณ๋ ฌ๋ก ์คํ๋ฉ๋๋ค.
์๊ฐ @nunit/core-team ?
์์์ ์ ์ธ:
@CharliePoole - ๊ทํ์ 3๊ฐ์ง ํฌ์ธํธ๋ ์ดํด๊ฐ ๋์ง๋ง, ๊ทํ๊ฐ ์ ์ํ๋ ๋์์ด ๋ฌด์์ธ์ง ๋ช ํํ์ง ์์ต๋๋ค. ๋ช ํํ ํด์ฃผ์๊ฒ ์ต๋๊น?
ํ์ฌ ํน์ฑ์ด ์๋ ๊ฒ์ ParallelScope.None์ด ์๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ์ทจ๊ธํฉ๋๋ค. ๋์คํจ์น๋ฅผ โโํ์ฑํํ๊ณ ํ ์คํธ ์คํ์ด ํฌ๊ฒ ๋๋ ค์ง๋ฉด ๋ณ๋ ฌ์ด ์๋ ๋๊ธฐ์ด์ ๋๊ธฐ์ด์ ์ถ๊ฐ๋ฉ๋๋ค.
PR #2011์ ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ด๊ธฐ ๋จ๊ณ๋ฅผ ์ํํ์ง๋ง ํ ์คํธ ์ผ์ด์ค๊ฐ ํฌํจ๋ ๊ณ ์ ์ฅ์น์ ์ค๋ ๋์์ ์คํ๋๋๋ก ๊ฐ์ ํ๋ #define์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด ์๊ฒฌ์ ๊ทธ ์ ํ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ํํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ๋ฌธ์ํํฉ๋๋ค.
ํ์ฌ ํฝ์ค์ฒ์ OneTimeTearDown์ ์คํ๋ ๋ง์ง๋ง ํ ์คํธ ์ผ์ด์ค๋ฅผ ์๋ฃํ๋ ๋ฐ ์ฌ์ฉ๋ ์ค๋ ๋์์ ์คํ๋ฉ๋๋ค. ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๋ฉด ์ด๋ค ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ ์ง ์์ธกํ ์ ์์ต๋๋ค. Fixture์ ํ์ํ ๊ฒ๊ณผ ๋ค๋ฅธ ํน์ฑ์ ๊ฐ์ง ์ค๋ ๋์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ง์ง๋ง์ผ๋ก ์๋ฃํ ํ ์คํธ๊ฐ STA์์ ์คํ ์ค์ธ ๊ฒฝ์ฐ OneTimeSetUp์ด MTA์์ ์คํ๋ ๊ฒฝ์ฐ์๋ ์ด ํ ์คํธ๊ฐ OneTimeTearDown์ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ ์ ์์ง๋ง ์ผ๋ถ์์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ค์ ๋ก ๋ ๋์ ์์ค์ ํฝ์ค์ฒ์์๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ง๋ง ๋ณ๋ ฌ ํ ์คํธ ์ผ์ด์ค์ ๋์ ์ ์ค๋ฅ๋ฅผ ์ ๋ฐํ๋ ๋ถ์ผ์น์ ๋ํ ๋ ๋ง์ ๊ธฐํ๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋ผ์ ๊ณ ์ ์ฅ์น ๋ถํด๊ฐ ์ฌ๋ฐ๋ฅธ ์ข ๋ฅ์ ์ค๋ ๋์์ ๋ฐ์ํ๋๋ก ํ๊ธฐ ์ํด ๋ง์ง๋ง์ผ๋ก ์คํํ ํ ์คํธ์ ์ค๋ ๋์์ ๋ ์ด์ ์คํํ ์ ์์ต๋๋ค. ๋์ , ๋์คํจ์ฒ๋ ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ๋ถํด์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ง ๊ด๋ฆฌํด์ผ ํ๋ฉฐ ์ ์ ํ ์๊ฐ์ ์ ์ ํ ์ค๋ ๋์์ ํด๋น ๋ถํด๋ฅผ ์คํํ๋ผ๋ ์๋ฆผ์ ๋ฐ์์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ํ์ ํ๋ ๊ฒ์ด ์ด ๊ธฐ๋ฅ์ "์ค๊ณ" ๋จ๊ณ์ ๋๋ค.
2014๋ ์ด๋ถํฐ ์ด ์ค๋ ๋๋ฅผ ํ๋ก์ฐํ๊ณ ์๊ณ ์ด ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์์ฒด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ตฌํํ๊ณ ์ถ์ง ์๊ฑฐ๋ ๊ตฌํํ ์ ์๋ ์ฌ๋์ ์ํด NUnit 2.6.3์ ์ฌ์ฉํ ์ ์๋ ๊ตฌํ์ ์ฐ์ฐํ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ฌ์ฉํ๊ธฐ ๋งค์ฐ ๊ฐ๋จํด ๋ณด์ด๋ CodePlex(์ฌ๋ฌ ๋ณ๋ ฌ ์ค๋ ๋์์ ๊ธฐ๋ฅ ํ ์คํธ๋ฅผ ์คํํ ๋ ์๋ํจ์ ํ์ธํ์ต๋๋ค).
์ด ๋ฉ์์ง๊ฐ ์ด ์ค๋ ๋์ ๋ํ ์ต๊ทผ ํ ๋ก ๊ณผ ์ฝ๊ฐ ์ง๊ตํ๋ ๊ฒฝ์ฐ ์ฌ์ ์ @CharliePoole ์ฌ๊ณผํ์ง๋ง ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ NUnit 3์ ๋ํด ์ฝ์๋ ์ฝ์์ ๊ธฐ๋ฐ์ผ๋ก ์ง๋ 3๋ ๋์ ์ด ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๋ฉด(์ด๊ธฐ์ ์ผ), ์ฌ๋ฌ๋ถ์ด ๋์์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋๊น์ง ์๋ฃจ์ ์ ์ ๊ณตํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์๋ฃจ์ ์ ์ ๊ทผํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆผ).
@์ฐฐ๋ฆฌํ
๋ฐ๋ผ์ ๊ณ ์ ์ฅ์น ๋ถํด๊ฐ ์ฌ๋ฐ๋ฅธ ์ข ๋ฅ์ ์ค๋ ๋์์ ๋ฐ์ํ๋๋ก ํ๊ธฐ ์ํด ๋ง์ง๋ง์ผ๋ก ์คํํ ํ ์คํธ์ ์ค๋ ๋์์ ๋ ์ด์ ์คํํ ์ ์์ต๋๋ค. ๋์ , ๋์คํจ์ฒ๋ ๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ๋ถํด์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ง ๊ด๋ฆฌํด์ผ ํ๋ฉฐ ์ ์ ํ ์๊ฐ์ ์ ์ ํ ์ค๋ ๋์์ ํด๋น ๋ถํด๋ฅผ ์คํํ๋ผ๋ ์๋ฆผ์ ๋ฐ์์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ํ์ ํ๋ ๊ฒ์ด ์ด ๊ธฐ๋ฅ์ "์ค๊ณ" ๋จ๊ณ์ ๋๋ค.
๋์คํจ์ฒ๊ฐ ๋ณด๋ฅ ์ค์ธ ๋ถํด ํญ๋ชฉ์ ๋ฏธ๋ฆฌ ์์์ผ ํฉ๋๊น, ์๋๋ฉด ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉด ๋์คํจ์นํ ์ ์์ต๋๊น? ๋ ๊ตฌ์ฒด์ ์ผ๋ก, CompositeWorkItem์ด ํ์ฌ PerformOneTimeTearDown ์ ํธ์ถํ๋ ์์น์์ ๋์คํจ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์์ ๋จ์๋ฅผ ์ฌ๋ฐ๋ฅธ ์์ ๊ต๋์ ํ๊ฒฌํ ์ ์์ต๋๊น?
@chris-smith-zocdoc ๋ค, ๊ทธ๊ฒ ๋ฐ๋ก ์ ๊ฐ ํ๋ ์ผ์
๋๋ค. CompositeWorkItem
์ค์ฒฉ๋์ด ์๊ณ ๋ง์ง๋ง ์์ ํ
์คํธ๊ฐ ์คํ๋ ๋ ์ ๋ฌ๋๋ ์๋ก์ด ์ ํ์ ์์
ํญ๋ชฉ OneTimeTearDownWorkItem
์ ๋ง๋ค์์ต๋๋ค. ๋์ค์ OneTimeSetUp๊ณผ ๋ชจ๋ ํ
์คํธ๊ฐ ๋์ผํ ์ค๋ ๋์์ ์คํ๋์์ ๋ ๋ช ๊ฐ์ง ํจ์จ์ฑ์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
๋ชจ๋ ๊ฒ์ ๋๋ฌด ์ฃผ์ ๊น๊ฒ ์ฝ์ง๋ ์์์ง๋ง ์ด ๊ธฐ๋ฅ์ ์ผ๋ถ๋ก ์์ฒญํ๊ณ ์ถ์ ํ ๊ฐ์ง๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ํนํ I/O ๋ฐ์ด๋ ํ ์คํธ์ ๊ฒฝ์ฐ "์ค๋งํธ"ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, 100๊ฐ์ ๋ณ๋ ฌํ ๊ฐ๋ฅํ ํ ์คํธ๋ฅผ ์คํํ๋ 10๊ฐ์ ์ค๋ ๋๊ฐ ์๋ ๊ฒฝ์ฐ 10๊ฐ์ ์ค๋ ๋๊ฐ ์์์ ๋ค์ 10๊ฐ์ ํ ์คํธ๋ก ์ด๋ํ๊ธฐ ์ ์ ์ฒ์ 10๊ฐ์ ํ ์คํธ๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋์ด์๋ ์ ๋ฉ๋๋ค. ์ฒ์ 10๊ฐ์ ํ ์คํธ๊ฐ ๋งค์ฐ ์ค๋ ์คํ๋๋ I/O ์์ ์ ๊ธฐ๋ค๋ฆฌ๊ธฐ ์์ํ๋ฉด ์ค๋ ๋๋ ๋ค๋ฅธ ํ ์คํธ๋ก ์์ ๋กญ๊ฒ ์ด๋ํ ์ ์์ด์ผ ํฉ๋๋ค. I/O ์์ ์ด ์๋ฃ๋๋ฉด ์ค๋ ๋๊ฐ ํด์ ๋๋ฉด ์ค๋ ๋๊ฐ ๋๊ธฐ ์ค์ธ ํ ์คํธ๋ฅผ ์ฌ๊ฐํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก async/await๋ฅผ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๋ I/O ๋ฐ์ด๋ ํ ์คํธ๋ฅผ ์ํ ์ค๋งํธ ์ฒ๋ฆฌ๋ ๊ด๋ฆฌ๋ฅผ ์์ฒญํฉ๋๋ค. ์ด๊ฒ์ ์ง๊ธ๊น์ง ํ ์คํธ์์ ๊ฐ์ฅ ํฐ ๋ณ๋ชฉ ํ์์ ๋๋ค.
@chris-smith-zocdoc ์ฌ์ค, ๊ทธ๊ฒ ์ ๊ฐ ํ๊ณ ์๋ ์ผ์ ๋๋ค. ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ์กด ์นด์ดํธ๋ค์ด ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ผํ์ฑ ๋ถํด ์์ ์ ๋์คํจ์น๋ฅผ โโํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ๋น๊ฒฐ์ ์ ์ ํ ๋๊ธฐ์ด์ ์ ๋ฌ๋๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
@gzak ๋ณ๋ ฌ ์คํ์ ์ํ ๋ฉ์ปค๋์ฆ์ด ์ด๋ฏธ ์กด์ฌํ๋ค๋ ์ ์ ์ผ๋์ ๋์ญ์์ค. ์์ ์์๊ฒ ์์ ์ ํธ์ํ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์๋๋ผ ์์ ์๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ ๊ฐ์ ธ์ค๋ ๋ฐ ์์กดํฉ๋๋ค. ๋ฐ๋ผ์ ํ ์์ ์๊ฐ ํ๋์ ์์ ์ผ๋ก ๋ฐ์๋ฉด ๋ค๋ฅธ ์์ ์๊ฐ ๊ณ์ ๋ค๋ฅธ ์์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋น๊ฒฐ์ ์คํ ์ค์ธ ํ ์คํธ์ ํน์ฑ์ ๋ฐ๋ผ ์์ ์ ์๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋๋ค. NUnit์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋ฐ ์ปดํจํ ๋ฐ์ด๋ ๋จ์ ํ ์คํธ์์ ์๋นํ ์ ์ํ๋์ง๋ง ๋ค๋ฅธ ์ข ๋ฅ์ ํ ์คํธ์์๋ ์ฌ์ฉ์๊ฐ ์ ์ ํ ์์ค์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ค์ ํด์ผ ํ ์ ์์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค๋ช
ํ ์ ์์ต๋๊น?
์ํ ์์
์ด ์์ด์
๋ณ๋ ฌ์ด ์๋ ์ด ํด๋์ค์์ ํ
์คํธ๋ฅผ ์คํํ ๋ - ๋ชจ๋ ํ
์คํธ ํต๊ณผ
๊ทธ๋ฌ๋ [Parallelizable(ParallelScope.Children)]๋ก ์คํํ ๋
๋ฐ๋ผ์ ๋ณ๋ ฌ๋ก ์คํ๋ฉ๋๋ค(๊ฐ์ ํด๋์ค์ ์ฌ๋ฌ ๋ฉ์๋).
๊ทธ๋ฌ๋ ์ด๋ค ์ด์ ๋ก ์ผ๋ถ ํ
์คํธ๋ ์คํจํฉ๋๋ค.
์ด ํด๋์ค์๋ ํ
์คํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ ์ธ์คํด์ค ํ๋๊ฐ ์์ผ๋ฉฐ ํด๋น ํ๋๋ ์ค๋ ๋ ๊ฐ์ ๊ณต์ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด ๋ง์ด ๋ง์?
ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ๋๋ง ๋ง๋ค๊ณ ์ด ๋จ์ผ ๊ฐ์ฒด์์ ๋์์ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๊น?
์ฐฐ๋ฆฌํ
๋น์ ์ ๊ทธ๊ฒ์ ์์ ๋์ด! ์, ๊ณ ์ ์ฅ์น์ ๋ชจ๋ ํ ์คํธ๋ ๋์ผํ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ํญ์ ๊ทธ๋ฐ ์์ผ๋ก ์๋ํด ์จ NUnit์ ์ญ์ฌ์ ์ฌ์ค์ ๋๋ค. ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ ๊ฒ๊ณผ ํ ์คํธ๋ณ๋ก ์์ ๋๋ ์ํ ์ค์์ ์ ํํด์ผ ํฉ๋๋ค. ํ์ฌ๋ก์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ฆ, ์ ์ ํ ๋น์จ์ ์กฐ๋ช ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๋จ์ํ ์กฐ๋ช ๊ธฐ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ฉด ์ข์ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค.
[Parallelizable(ParallelScope.Children)]์
AssemblyInfo.cs ํ์ผ?
์๋ฌด๋ ๊ทธ๊ฒ์ด ์๋ํ๋ ๊ฒ์ ๋ณธ ์ ์ด ์์ต๋๊น?
2017๋ 6์ 14์ผ 01:37์ CharliePoole [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
[์ด๋ฏธ์ง: ๋ฐ์ค๋น] https://www.boxbe.com/overview ์๋ ์ ๋ฆฌ: ์ ์ง
์ต๊ทผ 1๊ฐ ์ด๋ฉ์ผ([email protected]) ๊ท์น ์์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3DCCP9ir0TebdbdQOWVtGMQyr2TETYOrzfkbItPzUTgDk%253D%26token%3D0PvYtf1G2B%252FJ2FNN3b7MTSmP1zvs6x3Cu8z6LaAB8%252BJm73uy8ZNUCnQcknlgWKxRQ5zjE%252BY30Xkv1W1Gue9gGnpyi72YUTaHP2h6wvuEpTXe1WoQDoSHpUGDQefgQu6LDH0rRhsEvF%252FW%252BhysbMtsDw%253D% 253D&tc_serial=30872123699&tc_rand=2087335475&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_EDIT&utm_content=001
| ๊ท์น ์ญ์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3DCCP9ir0TebdbdQOWVtGMQyr2TETYOrzfkbItPzUTgDk%253D%26token%3D0PvYtf1G2B%252FJ2FNN3b7MTSmP1zvs6x3Cu8z6LaAB8%252BJm73uy8ZNUCnQcknlgWKxRQ5zjE%252BY30Xkv1W1Gue9gGnpyi72YUTaHP2h6wvuEpTXe1WoQDoSHpUGDQefgQu6LDH0rRhsEvF%252FW%252BhysbMtsDw%253D% 253D&tc_serial=30872123699&tc_rand=2087335475&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_EDIT&utm_content=001
| ์ค์ ํ์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3DCCP9ir0TebdbdQOWVtGMQyr2TETYOrzfkbItPzUTgDk%253D%26token%3D0PvYtf1G2B%252FJ2FNN3b7MTSmP1zvs6x3Cu8z6LaAB8%252BJm73uy8ZNUCnQcknlgWKxRQ5zjE%252BY30Xkv1W1Gue9gGnpyi72YUTaHP2h6wvuEpTXe1WoQDoSHpUGDQefgQu6LDH0rRhsEvF%252FW%252BhysbMtsDw%253D% 253D%26์ค์%3Dtrue%26emlId%3D61187554820&tc_serial=30872123699&tc_rand=2087335475&utm_source=stf&utm_medium00content=stf&utm_medium_email&utm_campaign=์ด๋ฉ์ผ๋น์ ์ ๊ทธ๊ฒ์ ์์ ๋์ด! ์, ๊ณ ์ ์ฅ์น์ ๋ชจ๋ ํ ์คํธ๋ ๋์ผํ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๊ฒ์ ํญ์ ๊ทธ๋ฐ ์์ผ๋ก ์๋ํด ์จ NUnit์ ์ญ์ฌ์ ์ฌ์ค์ ๋๋ค. ๋น์ ์ํด์ผํฉ๋๋ค
ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ ๊ฒ๊ณผ
ํ ์คํธ๋ณ๋ก ์์ ๋ฉ๋๋ค. ํ์ฌ๋ก์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.์ฆ, ์ ์ ํ ๋น์จ์ ๊ณ ์ ์ฅ์น๊ฐ ์์ผ๋ฉด ๊ฐ๋จํ ์คํํ์ญ์์ค.
์กฐ๋ช ๊ธฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฐ๊ฒฐํ๋ฉด ์ข์ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค.โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/nunit/nunit/issues/164#issuecomment-308157832 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAHNVuK-J-X74mlAA_eT7OX7dxs7MpoRks5sDqzLgaJpZM4CUZ8r
.
@agray ์, ์ฌ์ค ์ด๊ฒ์ด ์ ๊ฐ ์ง๊ธ AssemblyInfo.cs๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ ์ผํ ์ด์ ์ ๋๋ค.
์๋ ํ์ธ์ ์กฐ์ ,
AssemblyInfo.cs ํ์ผ์ ์ด๋ค ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ผ์ธ์ ์ถ๊ฐํ์๊ฒ ์ต๋๊น?
์ด๋ค ํจ๊ณผ๊ฐ ์๋์ง ์๊ณ ์ถ์ต๋๋ค.
๊ฑด๋ฐฐ,
์ค๋๋ฅ
2017๋
6์ 14์ผ ์์์ผ ์คํ 4์ 17๋ถ, Joseph Musser [email protected]
์ผ๋ค:
[์ด๋ฏธ์ง: ๋ฐ์ค๋น] https://www.boxbe.com/overview ์๋ ์ ๋ฆฌ: ์ ์ง
์ต๊ทผ 1๊ฐ ์ด๋ฉ์ผ([email protected]) ๊ท์น ์์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3DnRGYOf%252FKR68McP8RTipuFTLF9WUvAkSKSh6OYJYvJ2w%253D%26token%3DDcwWzMT9yPtQLckdXD3BLhW5xAB%252BMpc9XdsrbBlwdQJZC%252Bjo3SjsyMVC8vese%252BCNRw2IyucWqEcHR5Is7CK7nx01VuSQESvjG4ZUj%252B2Cfcwg51yUFFQJSwrmTVxqAk4%252BTVGDSrnutdAuqiJ3kTaYQA% 253D%253D&tc_serial=30882364582&tc_rand=1974513896&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_EDIT&utm_content=001
| ๊ท์น ์ญ์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3DnRGYOf%252FKR68McP8RTipuFTLF9WUvAkSKSh6OYJYvJ2w%253D%26token%3DDcwWzMT9yPtQLckdXD3BLhW5xAB%252BMpc9XdsrbBlwdQJZC%252Bjo3SjsyMVC8vese%252BCNRw2IyucWqEcHR5Is7CK7nx01VuSQESvjG4ZUj%252B2Cfcwg51yUFFQJSwrmTVxqAk4%252BTVGDSrnutdAuqiJ3kTaYQA% 253D%253D&tc_serial=30882364582&tc_rand=1974513896&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_EDIT&utm_content=001
| ์ค์ ํ์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3DnRGYOf%252FKR68McP8RTipuFTLF9WUvAkSKSh6OYJYvJ2w%253D%26token%3DDcwWzMT9yPtQLckdXD3BLhW5xAB%252BMpc9XdsrbBlwdQJZC%252Bjo3SjsyMVC8vese%252BCNRw2IyucWqEcHR5Is7CK7nx01VuSQESvjG4ZUj%252B2Cfcwg51yUFFQJSwrmTVxqAk4%252BTVGDSrnutdAuqiJ3kTaYQA% 253D%253D%26์ค์%3Dtrue%26emlId%3D61214070592&tc_serial=30882364582&tc_rand=1974513896&utm_source=stf&utm_medium=email&utm@array https://github.com/array ์, ์ฌ์ค ๊ทธ๊ฒ ์ ๊ฐ ์ ์ผํ ์ด์ ์ ๋๋ค.
์ง๊ธ AssemblyInfo.cs๊ฐ ์์ต๋๋ค.โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/nunit/nunit/issues/164#issuecomment-308325726 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAHNVghNAX8CJkqAy-qhAz8bXNhZcFOQks5sD3NigaJpZM4CUZ8r
.
@agray ๊ทํ๊ฐ ์ง๋ฌธํ ๋ด์ฉ:
c#
[Parallelizable(ParallelScope.Children)]
๋ชฉํ๋ฅผ ์์ง ๋ง์ธ์
[assembly: Parallelizable(ParallelScope.Children)]
@LirazShay NUnit์ ์ฌ์ฉํ์ฌ Selenium ํ ์คํธ๋ฅผ ๊ตฌ๋ํ๊ณ ์ฌ์ฉ์ ๊ณ์ ์ ๋ํ ์ฐธ์กฐ ๋ฐ ๋ด๊ฐ ์์ ํ๊ณ ์๋ Selenium WebDriver ์ธ์คํด์ค์ ๋ํ ์ฐธ์กฐ์ ๊ฐ์ ํญ๋ชฉ์ ์ ์งํ๊ธฐ ์ํด ๊ณ ์ ์ฅ์น ์์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ์ฅ์น ๋ด์์ ๋ณ๋ ฌ๋ก ํ ์คํธ๋ฅผ ์คํํ ์ ์์์ต๋๋ค. ๋ด๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ๊ฐ ํ ์คํธ์ ๋ํด ๋ชจ๋ ํ ์คํธ ์๊ตฌ ์ฌํญ์ ์บก์ํํ๊ณ ๋ ๋ถ๋ถ์์ ๊น๋ํ๊ฒ ๋ถํดํ๋ IDisposable์ ๊ตฌํํ๋ "ํฉํ ๋ฆฌ"(๋๋ ๊ทธ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ฉ์ด์ธ์ง ํ์ ์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํฉ๋๋ค)๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด [TearDown] ๋๋ [OneTimeTearDown]์ด ํ์ ์๋ ํ ์คํธ:
public class TestFactory : IDisposable
{
// Instantiate a new SafeHandle instance.
private readonly System.Runtime.InteropServices.SafeHandle handle = new Microsoft.Win32.SafeHandles.SafeFileHandle(IntPtr.Zero, true);
// Flag: Has Disposed been called?
private bool disposed = false;
public TestFactory()
{
this.UserRepository = new List<UserAccount>();
this.DU = new DataUtility();
}
// A list of users created for this test
public List<UserAccount> UserRepository { get; private set; }
// A very simple data layer utility that uses Dapper to interact with the database in my application
public DataUtility DU { get; private set; }
// Gets a new user and adds it to the repository
public UserAccount GetNewUser()
{
var ua = new UserAccount();
this.UserRepository.Add(ua);
return ua;
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (this.disposed)
{
return;
}
if (disposing)
{
// Deletes all user accounts created during the test
foreach (UserAccount ua in this.UserRepository)
{
try
{
ua.Delete();
}
catch (Exception)
{
// Take no action if delete fails.
}
}
this.DU.DeleteNullLoginFailures(); // Cleans up the database after tests
Thread.Sleep(1500);
}
this.disposed = true;
}
}
๊ทธ๋ฐ ๋ค์ ํ ์คํธ ๋ด์์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
[TestFixture]
public class UserConfigureTests
{
[Test]
public void MyExampleTest()
{
using (TestFactory tf = new TestFactory())
{
var testUser = tf.GetNewUser();
tf.DU.DoSomethingInTheDatabase(myParameter);
// Test actions go here, and when we exit this using block the TestFactory cleans
// up after itself using the Dispose method which calls whatever cleanup logic you've written into it
}
}
}
์ด๋ ๊ฒ ํ๋ฉด ๋ง์ ์ฝ๋ ์ค๋ณต์ ํผํ ์ ์๊ณ ํ ์คํธ์ ์ข ์์ฑ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ณต์ฅ์์ ํ ๋ฒ๋ง ์ํํ๋ฉด ๋ฉ๋๋ค. ๋๊ตฐ๊ฐ ๋ด๊ฐ ์ทจํ ์ ๋ต์ ๋ํ ํผ๋๋ฐฑ์ด ์๋ค๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
@tparikka ๋๋ ๊ทธ ์ ๊ทผ ๋ฐฉ์์ ๋ ์์ ์๊ฒ ๊ฐ๋ ฅํ ์ถ์ฒํฉ๋๋ค.
๋ด AssemblyInfo ํ์ผ์ ๋ค์์ด ์์ต๋๋ค.
[์ด์
๋ธ๋ฆฌ: Parallelizable(ParallelScope.Children)]
[์ด์
๋ธ๋ฆฌ: LevelOfParallelism(16)]
LevelOfParallelism ์์ฑ๋ ๋ ์ด์ ํ์ํฉ๋๊น?
2017๋ 6์ 15์ผ 04:37์ Joseph Musser [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
[์ด๋ฏธ์ง: ๋ฐ์ค๋น] https://www.boxbe.com/overview ์๋ ์ ๋ฆฌ: ์ ์ง
์ต๊ทผ 1๊ฐ ์ด๋ฉ์ผ([email protected]) ๊ท์น ์์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3Doth%252FFbAPG%252FhDbtUlS0i2PDDdQ0lP4dBi8o7QQmkLEMQ%253D%26token%3DHe7HfTrm%252Fiba3yIDazaBx8JO9NrmoL8p5TWtDB1hUxq0qp%252BhCRCB3OSl7sUQ6wDshc2I5LQhbR2jszLWr6FnRy%252FZUrCqghZIIilbDWKszT7pkI44xp9vaL6cszH9Sgg1YPCAHdVWqccZYxYXGW174A%253D% 253D&tc_serial=30894750852&tc_rand=1847060911&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_EDIT&utm_content=001
| ๊ท์น ์ญ์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3Doth%252FFbAPG%252FhDbtUlS0i2PDDdQ0lP4dBi8o7QQmkLEMQ%253D%26token%3DHe7HfTrm%252Fiba3yIDazaBx8JO9NrmoL8p5TWtDB1hUxq0qp%252BhCRCB3OSl7sUQ6wDshc2I5LQhbR2jszLWr6FnRy%252FZUrCqghZIIilbDWKszT7pkI44xp9vaL6cszH9Sgg1YPCAHdVWqccZYxYXGW174A%253D% 253D&tc_serial=30894750852&tc_rand=1847060911&utm_source=stf&utm_medium=email&utm_campaign=ANNO_CLEANUP_EDIT&utm_content=001
| ์ค์ ํ์
https://www.boxbe.com/popup?url=https%3A%2F%2Fwww.boxbe.com%2Fcleanup%3Fkey%3Doth%252FFbAPG%252FhDbtUlS0i2PDDdQ0lP4dBi8o7QQmkLEMQ%253D%26token%3DHe7HfTrm%252Fiba3yIDazaBx8JO9NrmoL8p5TWtDB1hUxq0qp%252BhCRCB3OSl7sUQ6wDshc2I5LQhbR2jszLWr6FnRy%252FZUrCqghZIIilbDWKszT7pkI44xp9vaL6cszH9Sgg1YPCAHdVWqccZYxYXGW174A%253D% 253D%26์ค์%3Dtrue%26emlId%3D61245244440&tc_serial=30894750852&tc_rand=1847060911&utm_source=stf&utm_medium_0content=stf&utm_medium_email&utm_campaign=email&utm_campaign=@tparikka https://github.com/tparikka ๋ฐ๋ก ๊ทธ ์ ์ ์ ๊ทน ์ถ์ฒํฉ๋๋ค.
๋ ์์ ์๊ฒ ์ ๊ทผํ์ญ์์ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/nunit/nunit/issues/164#issuecomment-308521058 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAHNVmEzVDbw32Xx0jkYcGK9bZW3tLvXks5sECh8gaJpZM4CUZ8r
.
์์ง LevelOfParallelism
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์ง ์์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ ํ ์ฝ์ด ์์
๋๋ค.
ํ ์คํธ๊ฐ CPU ๋ฐ์ด๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ ๋์ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฑ๋ฅ์ด ํญ์ ๊ทธ๋ ๋ฏ์ด ๋ต์ ์๋๋ฆฌ์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฏ๋ก ์ถ์ธกํ๋ ๊ฒ๋ณด๋ค ์ธก์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@CharliePoole TestcaseSource
ํ๊ณ ์์ง๋ง ๊ฒฐ๊ณผ ํ
์คํธ ์ผ์ด์ค๊ฐ ์ค์ ๋ก ๋ณ๋ ฌ๋ก ์คํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด ์๋ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
```c#
[ํ
์คํธํฝ์ค์ฒ]
ํด๋์ค ์ญ์ง๋ ฌํ
{
๊ณต๊ฐ ์ ์ IEnumerable
[TestCaseSource("ShouldDeserializeAllCases"), Parallelizable(ParallelScope.Children)]
public void ShouldDeserializeAll(TimeSpan t)
{
Thread.Sleep(t);
Assert.AreEqual(1, 1);
}
}
```
์์๋๋ ์ ์ฒด ์๊ฐ์ ~2๊ฐ ์๋ 10์ด์ ๋๋ค.
์์ด๊ฐ ์์ ๊ฒ ๊ฐ์์ ์ด ๊ฒฝ์ฐ์๋
[๋ณ๋ ฌ ๊ฐ๋ฅ(ParallelScope.All)]
๋๋ ํด๋์ค ์์ค์์ ์์ฑ์ ์ด๋ํฉ๋๋ค.
@ParanoikCZE ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ค์ ๋ก ๊ทธ ์์ฑ์ด ์๋ฏธํ๋ ๋ฐ์ ๋ํด ๋งน๋ชฉ์ ์ผ๋ก ๋ ์๊ฐ๊ณ ์์ผ๋ฏ๋ก ๊ฑฐ๊ธฐ์ ์๋ ๋ชจ๋ ์ด๊ฑฐํ ๊ฐ์ ์๋ํ์ต๋๋ค. All
, Children
, Fixture
๋๋ Self
๋ฌด์์ ์ฌ์ฉํ๋ ์๊ด์์ด ์คํ ์๊ฐ์ 10์ด์
๋๋ค(์ ์ด๋ Visual Studio์์๋).
๋ฐฉ๊ธ ์์ ์ผ๋ก ์ฎ๊ธฐ๋ ค๊ณ ํ์ง๋ง ์ด๊ฒ๋ ๋์์ด๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ด ์๊ฐ์ ์์ฒ์ ๋๋ค :)
class Deserialization
{
public static IEnumerable<TestCaseData> ShouldDeserializeAllCases
{
get
{
for (int i = 1; i <= 5; i++)
yield return new TestCaseData(TimeSpan.FromSeconds(i)).SetName($"Thread_worker_{i}");
}
}
[TestCaseSource(nameof(ShouldDeserializeAllCases)), Parallelizable(ParallelScope.Children)]
public void ShouldDeserializeAll(TimeSpan t) => System.Threading.Thread.Sleep(t);
}
@ParanoikCZE ๋ค์ ํ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Visual Studio์์ ์ด๊ฒ์ ํ ์คํธํ๋๋ฐ ์๊ฐํ๊ฐ ํจ์ฌ ๋ ๋ช ํํด์ก์ง๋ง ํ ์คํธ๋ ์ฌ์ ํ ์์ฐจ์ ์ผ๋ก ์คํ๋๊ณ ์์ต๋๋ค. ๋จ๊ณ๋ฅผ ๋๋ฆฌ๋ ๋์ ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ์ผ์ ํ ์ ์ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
AssemblyInfo์ [assembly: LevelOfParallelism(5)]์ ์ถ๊ฐํด ๋ณด์ธ์. ๊ธฐ๋ณธ๊ฐ์ด ์๋ ๊ฒ ๊ฐ์ง๋ง ์ด๋ป๊ฒ๋ ์๋ํ์ง ์์ ์ ์์ต๋๋ค. ์ด์จ๋ , ๋๋ ์์ด๋์ด๊ฐ ์๋ค. :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด๊ฐ ๋ฏธ๋๋ฅผ ์์ธกํ๋ ์ฒ ํ ์๋ ์์ง๋ง, ๊ทธ๊ฒ์ 9์๊น์ง๋ง ๋น์ ์ ๋ง์กฑ์ํฌ ๊ฒ์ ๋๋ค. :-)
๊ธฐ๋ฅ์ "์์ฝ"ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ฌ ๋ต๋ณํ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ์ฌ ๋ถ๊ธฐ์ ํ ๋ฒ ๋ฆด๋ฆฌ์ค๊ฐ ๋์ค๋ ์ ๊ทผ ๋ฐฉ์์ (์ฐ์ด๋ถํฐ) ์๋ํ๊ณ ์์ต๋๋ค. ์ถ์๋ฅผ ๋ ์ํ๊ฒ ๋๋ฉด ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ ์ง์์ ์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์์ ๋ด์ฌ ์คํ ์์ค ํ๋ก์ ํธ์์ ๋งค์ ์ฌ์ฉํ ์ ์๋ ๊ณ ์ ๋ ์์ ๋ ธ๋ ฅ์ ์์ต๋๋ค. "์ด์ ๋ ์จ" ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฌ๋๋ค์ด NUnit์ ์๋นํด์ผ ํ๋ ์๊ฐ๊ณผ ์์ ๋ด์ฌ ์ธ์ ์๋ ๋งค์ฐ ๋ค์ํฉ๋๋ค.
ํํ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ฆด๋ฆฌ์ค์ ํต์ฌ์ด ๋๋ ์์์ ๋ฌธ์ ๋ฅผ ์ ํํ์ฌ ๋ฏธ๋ฆฌ ์ด์ ํ์ ์ถ๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ ํธํ๋ ๊ฒ์ ์๋ฃ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ฒ์ ์ฝ 25% ์ด์์ ์ถ๊ฐํ์ง ์๋ ๊ฒ์ ๋๋ค. ๋ฆด๋ฆฌ์ค์ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ ์์ ์ด ์๋ฃ๋ ํ ๋๋ ๊ธฐ๊ปํด์ผ ๋๊ตฐ๊ฐ๊ฐ ์์ ์ ์ ๋ ํ ๋๋ง ํด๋น ์ด์ ํ์ ์ถ๊ฐ๋ฉ๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ํ ๋น๋์ง ์์ ์ํ์์๋ ์ผ๋ฐ์ ์ผ๋ก 3.5 ๋ง์ผ์คํค์์ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋ฌด์ธ๊ฐ ๋ค๋ฅธ ์์ ์ ๋ฐฉํดํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒฝ์ฐ ๊ฐ๋ ํ์ธํฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ์ ๊ธ์ ์ ์ธ ์ธก๋ฉด์ ๋ฆด๋ฆฌ์ค๊ฐ ์ ์๊ฐ์ ๋์ฌ ๊ฒ์ด๋ผ๊ณ ์ฌ์ค์ ๋ณด์ฅํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ถ์ ์ ์ธ ์ธก๋ฉด์ ๊ทธ ์์ ๋ฌด์์ด ๋ค์ด ์๋์ง ๋งํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. :-(
์ด ํน์ ๋ฌธ์ ์ ๋ํด... ์ ๋ ์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ค์๊ฒ ์ด๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํด ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ต๋๋ค. ๋๊ตฐ๊ฐ๋ ์์ ๋กญ๊ฒ ์์ ํ ์ ์์ด์ผ ํ๋ฉฐ ์ด ๋ฒ์์ ์ด๋ ค์์ ํ๋ก์ ํธ์ ๋ํ ์ถฉ๋ถํ ๋ฐฐ๊ฒฝ โโ์ง์์ด ์์ด์ผ ํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ๋๊ตฐ๊ฐ๊ฐ ์์ผ๋ก ๋ช ์ฃผ ์์ ์ด๊ฒ์ ์ ํํ๋ค๋ฉด, ๋๋ ๊ทธ๊ฒ์ด ๋ฆด๋ฆฌ์ค๊น์ง ์๋ฃ๋ ์ ์๋ค๊ณ ์ถ์ธกํ ๊ฒ์ ๋๋ค. ์ฐธ๊ณ ๋ก ์ ๋ ๋ค๋ฅธ ์ผ์ ํ๋ฉด์ ์ด ์ผ์ ํ๋ ๋ฐ ํ ๋ฌ ์ ๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์์.
์ฃ์กํ์ง๋ง ๋ ์ด์ ํ์คํ ๋ต๋ณ์ ์์ง๋ง ๊ทธ๋ฌํ ๋ต๋ณ์ ๋ฐ๋์ ๊ฑฐ์ง๋ง์ด ๋ ๊ฒ์ ๋๋ค!