Nunit: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€ ๋ฐ ํ•ด๋‹น ๋ฒ”์ฃผ ๋ชฉ๋ก์„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 08์›” 27์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: nunit/nunit

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

์ด๊ฒƒ์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์™€ ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋ชฉ๋ก์„ ์–ป์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
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 ์†์„ฑ์„ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  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 ์†์„ฑ์„ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ถœ๋ ฅ ์ž์ฒด์— ๋Œ€ํ•œ 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๋ฒˆ์„ ์„ž์„ ๊ฒƒ ๊ฐ™์•„์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰