์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
์ด๊ฒ์ ์ง๋ฌธ์ ๋๋ค.
๋ชจ๋ ํ ์คํธ ์ผ์ด์ค์ ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ๋ชฉ๋ก์ ์ป์ผ๋ ค๊ณ ํฉ๋๋ค.
ํ์ฌ ์ธ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค.
1) ๋ฆฌํ๋ ์
: ๋ชจ๋ ๋ฐฉ๋ฒ์ ๊ฑฐ์น๋ฉด์ TestAttribute/TestCaseAttribute/TestFixture...๋ฅผ ํ์ธํฉ๋๋ค.
2) runner๋ฅผ ์ด์ฉํ์ฌ runner.Explore๋ก xml์ ์ถ์ถํ๊ณ xml์ ํ์ฑํ๋ค.
3) NUnit์ด ์ด๋ฏธ ํ๊ณ ์๋ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
๋ด ์ง๋ฌธ์ ํ์์ ๊ดํ ๊ฒ์
๋๋ค.
๊ฐ ํ
์คํธ ์ผ์ด์ค์ ๋ํ ๋ฒ์ฃผ๋ฅผ "ํํํ๊ฒ"ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? (์นดํ
๊ณ ๋ฆฌ๊ฐ ์ถ์ ํด๋์ค ๋๋ ์ ์ฒด ํด๋์ค์ ์๋ ๊ฒฝ์ฐ)
์ด์์ ์ผ๋ก๋ ํ
์คํธ ๋ชฉ๋ก์ ์ถ์ถํ๊ธฐ ์ํด NUnit์์ ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ๊ฒ์ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
์ฝ๊ธฐ ์์ ์์น์ ๋ํ ์ ์์ด ์์ต๋๊น?
์น์ ํ๋,
์๋ชฌ
์๋
ํ์ธ์,
๋๋ ์ต๊ทผ์ ๋์ผํ ์์
์ ์ํํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋๊ณ ํ์ฌ ์๋ฃจ์
(๋น์ ์๊ฒ ํจ๊ณผ๊ฐ ์์ ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ ์๋ ์์)์ ์ ์ฐฉํ๊ธฐ ์ ์ ๋ช ๊ฐ์ง๋ฅผ ์๋ํ์ต๋๋ค. ๋ค๋ฅธ nunit3 ํ
์คํธ ํ๋ก์ ํธ(์ผ๋ถ๋ dotnet ํ๋ ์์ํฌ๋ฅผ ๋์์ผ๋ก ํ๊ณ ์ผ๋ถ๋ dotnet ์ฝ์ด๋ฅผ ๋์์ผ๋ก ํจ)์์ ์๋ํ๋ ์๋นํ ๋ฒ์ฉ์ ์ธ ์๋ฃจ์
์ด ํ์ํ์ต๋๋ค. ์ฒ์์๋ ๋ฆฌํ๋ ์
๊ณผ ์ด์
๋ธ๋ฆฌ ๋ก๋ฉ์ ์๋ํ๊ณ ITestBuilder
์ธํฐํ์ด์ค์์ BuildFrom()
๋ฅผ ํธ์ถํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์ ํจ๊ณผ๊ฐ ์์์ง๋ง ๋ชจ๋ ํ๋ก์ ํธ๋ ์๋์๊ณ ๋ง์ ์์
์ฒ๋ผ ๋๊ปด์ก๊ณ NUnit์ด ๋ฌด๊ฑฐ์ด ์์
์ ์ํํ๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
๋ค์์ผ๋ก NUnit ์์ง API (์๋ฅผ ๋ณด๋ ค๋ฉด ์๋๋ก ์คํฌ๋กค)๋ฅผ ์๋ํ๊ณ dotnet ํ๋ ์์ํฌ๋ฅผ ๋์์ผ๋ก ํ๋ nunit ํ๋ก์ ํธ์์ ์๋ํ์ง๋ง dotnet ์ฝ์ด๋ฅผ ๋์์ผ๋ก ํ๋ ํ๋ก์ ํธ์ ๋ํ ์ข ์์ฑ์ ๋ก๋ํ๋ ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค. ๋ฌผ๋ก YMMV๋ ๋ง์ฐฌ๊ฐ์ง์์ต๋๋ค.
๊ฒฐ๊ตญ ๋ด ์๋ฃจ์
์ด ๋ค๋ฅธ ๋จ์ ํ
์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ํ
์คํธ ์๋ฃจ์
์์๋ ์๋ํ์ฌ nunit3testadapter์ ํจ๊ป ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ง์ vstest ํ
์คํธ ๋ก๊ฑฐ๋ฅผ ๋ง๋ค๋ฉด ์ข์ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ก๊ฑฐ๋ DiscoveredTests
๋ฐ DiscoveryComplete
์ด๋ฒคํธ์ ๋ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ์ํฉ๋๋ค. ๋ก๊ฑฐ๋ ๋ฐ๊ฒฌ๋ ํ
์คํธ ์ผ์ด์ค ๊ฐ์ฒด ๋ชฉ๋ก์ json ํ์ผ๋ก ์ง๋ ฌํํ ๋ค์ ๋ค๋ฅธ ๊ณณ์์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ก๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด vstest ์ฝ์์ ์คํํ๊ณ ํ
์คํธ ๊ฒ์๋ง ์คํ๋๋๋ก /ListTests
์ค์์น๋ฅผ ์ ๊ณตํ๊ณ ์ฌ์ฉ์ ์ง์ ๋ก๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์ต์
: vstest.console.exe <testassemblypath> /ListTests /Logger:<customloggername> -- RunConfiguration.TestAdaptersPaths=<directoryofcustomlogger>;<directoryofnunitadapter>
(์ด์ค ๋ค์ ๊ณต๋ฐฑ์ด ์์์ ์ ์ํ์ญ์์ค. ํ์ดํ). ๋จ์ง์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐ Microsoft.TestPlatform.TranslationLayer
๊ทธ๊ฑด ๋น์ ์ด vstest ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๋ชจ๋์ ์ก์ธ์ค ํ ์ ์๊ธฐ ๋๋ฌธ์ JsonDataSerializer ๋ฐ๊ฒฌ ๋ ํ
์คํธ ์ผ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ / ์ง๋ ฌํ ์ง๋ ฌํ ๋ณต์์ ๋ํํฉ๋๋ค. ํ
์คํธ ๊ฒ์ ์ด๋ฒคํธ๋ฅผ ๋์
ํ ํ๋ซํผ ๋ฒ์ ๊ณผ ํธํ๋๊ธฐ ๋๋ฌธ์ ๋ฒ์ญ ๋ ์ด์ด ํจํค์ง์ v16 ์ด์์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. nuget์์ vstest๋ฅผ ๋ค์ด๋ก๋ํ๊ฑฐ๋ Visual Studio 2019๊ฐ ์ค์น๋์ด ์๋ ๊ฒฝ์ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ๋์์ vstest.console.exe ๋ฐ NUnit3Adapter๋ฅผ ์ฌ์ฉํ๊ณ DumpXmlTestDiscovery ์ด๋ํฐ ์ค์ ์ ํ์ฑํํ๋ vstest.console.exe <testassemblypath> /ListTests -- NUnit.DumpXmlTestDiscovery=True
.
๊ทธ ์๋ฃจ์ ์ ๊ทํ์ ํ์์ ๋ฐ๋ผ ์ฝ๊ฐ ์ค๋ฒ์ผ ์ ์์ง๋ง ๊ฒฐ๊ตญ ๋ง์ ์ฝ๋๊ฐ ๋์ง๋ ๋ชปํ์ต๋๋ค. ์๋น์๊ฐ vstest ๋ฒ์ 16 ์ด์์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ ๋จธ๋ฆฌ๋ก๋ ๊ธฐ์ต์ด ์ ์๋์ง๋ง ์นดํ ๊ณ ๋ฆฌ๊ฐ 'ํํํด์ก์ต๋๋ค'๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฐธ์กฐ:
[ํธ์ง] ์์ ์ฌ์ฉ๋ฒ ์ ๋ฐ์ดํธ - ์๋ชป๋ runconfiguration ์์ฑ์ ํฌํจํ์ต๋๋ค.
ํ ์คํธ ์ถ๋ ฅ ์์ฒด์ ๋ํ DumpXmlTestDiscovery์ Xml(!)์ NUnit ์์ง์์ ์ง์ ์ ๊ณต๋๋ฉฐ ์์ฒด์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ด๋ํฐ๊ฐ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ Xml ์ ๋ณด์ด๋ฏ๋ก ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ์ ์ด๋ํฐ๊ฐ ํ์ํ๊ณ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ด ์์๋ ์ ์์ผ๋ฏ๋ก ๋งค์ฐ ์ฃผ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ผ ์์ฒด ๊ฐ ํ์ฅ๋๋ฏ๋ก ์ฝ๋์์ ์ด๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ ์คํธ ๊ฒ์ ์ถ๋ ฅ ๋ ธ๋๋ฅผ ์ก๋ ๊ฒ์ ์๋ฒฝํ๊ฒ ์์ ํด์ผ ํฉ๋๋ค.
์๋ ํ์ธ์ @shack05 ์ @OsirisTerje ,
๊ทํ์ ํต์ฐฐ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋ชจ๋ ์๋ฃจ์ ์ ์์ฝํ๋ ค๋ฉด:
1) ๋ฐ์ฌ:
์ด์
๋ธ๋ฆฌ x = Assembly.GetExecutingAssembly();
var ํด๋์ค = x.GetExportedTypes();
foreach (System.Type type in classes)
{
MethodInfo[] methods = type.GetMethods();
foreach (MethodInfo methodInfo in methods)
{
if ((methodInfo.GetCustomAttributes(typeof(TestAttribute), true).Length == 1)
...
2) NUnit ์์ง API:
ITestEngine ์์ง = TestEngineActivator.CreateInstance();
// Create a simple test package - one assembly, no special settings
TestPackage package = new NUnit.Engine.TestPackage(Assembly.GetExecutingAssembly().Location);
// Get a runner for the test package
ITestRunner runner = engine.GetRunner(package);
var tree = runner.Explore(NUnit.Engine.TestFilter.Empty);//new NUnit.Engine.TestFilter("*"));
3) ์ฝ์(NUnit ๋๋ vstest):
nunit3-console.exe Tests.dll --explore:"nunit3-test.xml" --where="{testFilter}"
์๋ง 1๋ฒ๊ณผ 3๋ฒ์ ์์ ๊ฒ ๊ฐ์์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์,
๋๋ ์ต๊ทผ์ ๋์ผํ ์์ ์ ์ํํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋๊ณ ํ์ฌ ์๋ฃจ์ (๋น์ ์๊ฒ ํจ๊ณผ๊ฐ ์์ ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ ์๋ ์์)์ ์ ์ฐฉํ๊ธฐ ์ ์ ๋ช ๊ฐ์ง๋ฅผ ์๋ํ์ต๋๋ค. ๋ค๋ฅธ nunit3 ํ ์คํธ ํ๋ก์ ํธ(์ผ๋ถ๋ dotnet ํ๋ ์์ํฌ๋ฅผ ๋์์ผ๋ก ํ๊ณ ์ผ๋ถ๋ dotnet ์ฝ์ด๋ฅผ ๋์์ผ๋ก ํจ)์์ ์๋ํ๋ ์๋นํ ๋ฒ์ฉ์ ์ธ ์๋ฃจ์ ์ด ํ์ํ์ต๋๋ค. ์ฒ์์๋ ๋ฆฌํ๋ ์ ๊ณผ ์ด์ ๋ธ๋ฆฌ ๋ก๋ฉ์ ์๋ํ๊ณ
ITestBuilder
์ธํฐํ์ด์ค์์BuildFrom()
๋ฅผ ํธ์ถํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์ ํจ๊ณผ๊ฐ ์์์ง๋ง ๋ชจ๋ ํ๋ก์ ํธ๋ ์๋์๊ณ ๋ง์ ์์ ์ฒ๋ผ ๋๊ปด์ก๊ณ NUnit์ด ๋ฌด๊ฑฐ์ด ์์ ์ ์ํํ๋๋ก ํ๊ณ ์ถ์ต๋๋ค.๋ค์์ผ๋ก NUnit ์์ง API (์๋ฅผ ๋ณด๋ ค๋ฉด ์๋๋ก ์คํฌ๋กค)๋ฅผ ์๋ํ๊ณ dotnet ํ๋ ์์ํฌ๋ฅผ ๋์์ผ๋ก ํ๋ nunit ํ๋ก์ ํธ์์ ์๋ํ์ง๋ง dotnet ์ฝ์ด๋ฅผ ๋์์ผ๋ก ํ๋ ํ๋ก์ ํธ์ ๋ํ ์ข ์์ฑ์ ๋ก๋ํ๋ ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค. ๋ฌผ๋ก YMMV๋ ๋ง์ฐฌ๊ฐ์ง์์ต๋๋ค.
๊ฒฐ๊ตญ ๋ด ์๋ฃจ์ ์ด ๋ค๋ฅธ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ํ ์คํธ ์๋ฃจ์ ์์๋ ์๋ํ์ฌ nunit3testadapter์ ํจ๊ป ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ง์ vstest ํ ์คํธ ๋ก๊ฑฐ๋ฅผ ๋ง๋ค๋ฉด ์ข์ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ก๊ฑฐ๋
DiscoveredTests
๋ฐDiscoveryComplete
์ด๋ฒคํธ์ ๋ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ์ํฉ๋๋ค. ๋ก๊ฑฐ๋ ๋ฐ๊ฒฌ๋ ํ ์คํธ ์ผ์ด์ค ๊ฐ์ฒด ๋ชฉ๋ก์ json ํ์ผ๋ก ์ง๋ ฌํํ ๋ค์ ๋ค๋ฅธ ๊ณณ์์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ก๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด vstest ์ฝ์์ ์คํํ๊ณ ํ ์คํธ ๊ฒ์๋ง ์คํ๋๋๋ก/ListTests
์ค์์น๋ฅผ ์ ๊ณตํ๊ณ ์ฌ์ฉ์ ์ง์ ๋ก๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์ต์ :vstest.console.exe <testassemblypath> /ListTests /Logger:<customloggername> -- RunConfiguration.TestAdaptersPaths=<directoryofcustomlogger>;<directoryofnunitadapter>
(์ด์ค ๋ค์ ๊ณต๋ฐฑ์ด ์์์ ์ ์ํ์ญ์์ค. ํ์ดํ). ๋จ์ง์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ถ๊ฐMicrosoft.TestPlatform.TranslationLayer
๊ทธ๊ฑด ๋น์ ์ด vstest ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๋ชจ๋์ ์ก์ธ์ค ํ ์ ์๊ธฐ ๋๋ฌธ์ JsonDataSerializer ๋ฐ๊ฒฌ ๋ ํ ์คํธ ์ผ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ / ์ง๋ ฌํ ์ง๋ ฌํ ๋ณต์์ ๋ํํฉ๋๋ค. ํ ์คํธ ๊ฒ์ ์ด๋ฒคํธ๋ฅผ ๋์ ํ ํ๋ซํผ ๋ฒ์ ๊ณผ ํธํ๋๊ธฐ ๋๋ฌธ์ ๋ฒ์ญ ๋ ์ด์ด ํจํค์ง์ v16 ์ด์์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. nuget์์ vstest๋ฅผ ๋ค์ด๋ก๋ํ๊ฑฐ๋ Visual Studio 2019๊ฐ ์ค์น๋์ด ์๋ ๊ฒฝ์ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์์ต๋๋ค.๋ ๋ค๋ฅธ ๋์์ vstest.console.exe ๋ฐ NUnit3Adapter๋ฅผ ์ฌ์ฉํ๊ณ DumpXmlTestDiscovery ์ด๋ํฐ ์ค์ ์ ํ์ฑํํ๋
vstest.console.exe <testassemblypath> /ListTests -- NUnit.DumpXmlTestDiscovery=True
.๊ทธ ์๋ฃจ์ ์ ๊ทํ์ ํ์์ ๋ฐ๋ผ ์ฝ๊ฐ ์ค๋ฒ์ผ ์ ์์ง๋ง ๊ฒฐ๊ตญ ๋ง์ ์ฝ๋๊ฐ ๋์ง๋ ๋ชปํ์ต๋๋ค. ์๋น์๊ฐ vstest ๋ฒ์ 16 ์ด์์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ ๋จธ๋ฆฌ๋ก๋ ๊ธฐ์ต์ด ์ ์๋์ง๋ง ์นดํ ๊ณ ๋ฆฌ๊ฐ 'ํํํด์ก์ต๋๋ค'๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฐธ์กฐ:
[ํธ์ง] ์์ ์ฌ์ฉ๋ฒ ์ ๋ฐ์ดํธ - ์๋ชป๋ runconfiguration ์์ฑ์ ํฌํจํ์ต๋๋ค.