Nunit: .NET CLI ๋ฐ .NET Core์—์„œ `dotnet test` ์ง€์›

์— ๋งŒ๋“  2016๋…„ 03์›” 23์ผ  ยท  49์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: nunit/nunit

์ฝ˜์†” ์•ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ nunitlite ๋กœ dotnet run (์˜ˆ: ์ด chessie ์ปค๋ฐ‹ )๋กœ nunit ํ…Œ์ŠคํŠธ๋ฅผ ์ด๋ฏธ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘ํ’ˆ (์žŠ์ง€ dnxcore50 ๊ธฐ์••์ด ์žˆ์–ด์•ผํ•œ๋‹ค netstandard )

๊ทธ๋Ÿฌ๋‚˜ .NET CLI( https://github.com/dotnet/cli )์—์„œ ํ…Œ์ŠคํŠธ ์‹คํ–‰์˜ ๊ฒฝ์šฐ ๋ช…๋ น์€ dotnet test

dotnet test IDE( ref dotnet/cli#1376 )์—์„œ Discover/debug/etc์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ํ˜„์žฌ์˜ ๋ฐฉ๋ฒ•์ด๋ฉฐ dnx๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ( #927์€ ๋‹ซ์•„์•ผ ํ•จ) aspnet ๋ฐ dnx๋Š” .NET CLI๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

dotnet test ํ•„์š”ํ•œ ์ƒˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ dotnet-test-nunit dotnet test

dotnet-test-xunit ์™€ ๋™์ผ(https://github.com/xunit/coreclr.xunit/pull/1 ์ฐธ์กฐ)

xunit ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์˜ˆ์ œ project.json (https://github.com/dotnet/cli ๋‚ด๋ถ€์˜ ์ฐธ์กฐ ํ…Œ์ŠคํŠธ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
    "version": "1.0.0-*",
    "dependencies": {
        "NETStandard.Library": "1.5.0-rc2-23911",
        "xunit": "2.1.0",
        "dotnet-test-xunit": "1.0.0-dev-91790-12"
     },
     "frameworks": {
         "netstandardapp1.5": { }
     },
     "testRunner": "xunit"
}

testRunner ์†์„ฑ์€ dotnet test ( ref source )์—์„œ ์ฝ๊ณ  dotnet-test-{testRunner}

/cc @piotrpMSFT @livarcocc ๋Š” .NET CLI ๋ฐ dotnet-test, dotnet-test-xunit์—์„œ ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ๊ณผ @piotrpMSFT ๊ฐ€ ๊ดœ์ฐฎ๋‹ค๋ฉด ์ œ๊ฐ€ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

done enhancement high

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•„์ง ๋ณธ๊ฒฉ์ ์ธ ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์ฝ˜์†”๊ณผ Visual Studio์—์„œ NUnit .NET Core ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•ŒํŒŒ๋ฅผ ์–ป๊ธฐ ์ „์— ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์ง€๋งŒ, ์—ด์‹ฌํžˆ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ณ  ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ์ด์ œ ํ›จ์”ฌ ๋” ๊ฐ€๊นŒ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ CI ๋นŒ๋“œ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ํƒ€์ด์–ด๋ฅผ ๋ฐœ๋กœ ์ฐจ๊ณ  ๋ฌธ์ œ๋ฅผ ์ฐพ๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์Šคํฌ๋ฆฐ์ƒท์ด ์žˆ์Šต๋‹ˆ๋‹ค.

image

๋ชจ๋“  49 ๋Œ“๊ธ€

์šฐ๋ฆฌ๋Š” #927๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— .NET Core๊ฐ€ ์กฐ๊ธˆ ์•ˆ์ •๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ์ด ์ƒˆ๋กœ์šด ์ œ๋ชฉ๊ณผ ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ์ด์œ ์ž…๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— //build์—์„œ ๋ฐœํ‘œ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐœํ‘œ๋ฅผ ๊ธฐ๋‹ค๋ฆด ๊ณ„ํš์ด์—ˆ์ง€๋งŒ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ณ„ํš์€ .NET Core, UWP ๋ฐ Xamarin์„ ํฌํ•จํ•˜์—ฌ ์˜ฌ ์—ฌ๋ฆ„ 3.4 ๋ฆด๋ฆฌ์Šค๋กœ ๋” ๋งŽ์€ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ง€์›์„ ์ œ๊ณตํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ž˜ ์ž‘์„ฑ๋œ ์š”์•ฝ์„ ์ œ๊ณตํ–ˆ์œผ๋ฏ€๋กœ #927์„ ๋‹ซ๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ์•ž์œผ๋กœ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋„์›€์„ ์›ํ•˜์‹œ๋ฉด ์กฐ์ •ํ•ด ๋“œ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์„ธ์Šค์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” NUnitLite ๋ฐ ํ˜„์žฌ Xamarin ๋Ÿฌ๋„ˆ์™€ ๊ฐ™์€ NUnit ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠน์ • ๋ฒ„์ „์— ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” PCL ๋“œ๋ผ์ด๋ฒ„/์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ์ดˆ๊ธฐ ๋‹จ๊ณ„์ด์ง€๋งŒ nunit.portable.agent ํ”„๋กœ์ ํŠธ์—์„œ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

@piotrpMSFT ๋˜๋Š” @livarcocc ๊ฐ€ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋„์›€์ด๋‚˜ ์กฐ์–ธ๋„ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@rprouse dotnet ํ…Œ์ŠคํŠธ์™€ ๋Ÿฌ๋„ˆ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ ๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด CLI์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋˜๋Š” ๋‚ด์ผ ์™„๋ฃŒํ•˜๊ณ  ์—ฌ๊ธฐ์— ๋งํฌ๋ฅผ ๊ฑธ์–ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ฒ„๊ทธ๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค: https://github.com/dotnet/cli/issues/1803.

์ด๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฑฐ ์จ๋ณด๊ณ  ์‹ถ์€๋ฐ dotnet cli ์ƒํƒœ๊ณ„๊ฐ€ ์•ˆ์ •ํ™”๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ์ง„์ „์„ ์ด๋ฃจ๊ณ  ์žˆ์ง€๋งŒ RC2๊ฐ€ ๋–จ์–ด์งˆ ๋•Œ๊นŒ์ง€ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ณ€ํ™”๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ์ง€๊ฒน๋‹ค :smile:

.NET Core RC2๊ฐ€ ๋ฆด๋ฆฌ์Šค ๋˜์—ˆ์œผ๋ฉฐ ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ์šฉ ๋งํฌ.

์ œ๊ฐ€ ๋„์™€๋“œ๋ฆด๊นŒ์š”? ์ด๊ฒƒ์€ StackExchange.Redis์™€ ๊ฐ™์€ ์ผ๋ถ€ ํฌํŠธ๋ฅผ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•œ ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๋‹ค.

@NickCraver ํ™•์‹คํžˆ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์ฒ˜์Œ ์ฝ์–ด๋„ ์ƒํ™ฉ์ด ๋งค์šฐ ๋ช…ํ™•

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์ด ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ .NET Core๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์ด์‹ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ๋นŒ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์ง€๋งŒ ํ•„์š”ํ•œ์ง€ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ dotnet ๋ช…๋ น์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ํ™•์žฅ์„ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ nunit3-console์ด .NET Core ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก nunit ์—”์ง„์ด ํ•ต์‹ฌ nunit-agent๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์•„์ง ํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋„์™€์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@rprouse ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ต์‹ฌ ๋นŒ๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋‚จ์€ ์ž‘์—…๋Ÿ‰์„ ๊ฐ์•ˆํ•  ๋•Œ ์†”์งํžˆ ๋งํ•ด์„œ ๋‹ค๋ฅธ ๊ณณ์— ํˆฌ์žํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•  ๋•Œ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์•ฑ์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐ ์ค‘์ธ ๋งŽ์€ ๋‹ค์šด์ŠคํŠธ๋ฆผ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณต๊ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ง์„ ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ ์—ฌ๊ธฐ์— ์žˆ๋Š” ์ง€์—ฐ๊ณผ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ์„ ๊ณ ๋ คํ•  ๋•Œ ๋ชจ๋“  ๊ฒƒ์„ xUnit์œผ๋กœ ์ด์‹ํ•˜๋Š” ์ž‘์—…์„ ์™„๋ฃŒํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ˆ˜๋ฐฑ์—์„œ ์ˆ˜์ฒœ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์ฐจ๋‹จ๋œ ๋ฆด๋ฆฌ์Šค ์ฒด์ธ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•ˆ์ •๋˜๊ณ  ์‹œ๊ฐ„์ด ํ—ˆ๋ฝํ•œ ํ›„์— ์ด๊ฒƒ์„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ (๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ €๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค) ์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” ๋‚ด๊ฐ€' d ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™„์„ฑ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌํŠธ๋ฅผ ๋ฐฐ์†กํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋ฐ”๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๊ฐ€์˜ ์˜๋ฌด๋ผ๋Š” ๊ด€์ ์—์„œ, ๋‚˜๋Š” ๋จผ์ € ์‚ฌ๋žŒ๋“ค์„ ์ฐจ๋‹จ ํ•ด์ œํ•œ ๋‹ค์Œ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ์—…์ŠคํŠธ๋ฆผ์„ ๋„์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@NickCraver ๊ฐ€ xUnit์œผ๋กœ ํฌํŒ…ํ•˜๋Š” ๋ฐ ๋…ธ๋ ฅ์„ NUnit 3์„ ์‚ฌ์šฉํ•˜์—ฌ .NET Core ํ…Œ์ŠคํŠธ ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ธ”๋กœ๊ทธ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ๊ทธ๋ ‡๊ฒŒํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ธฐ๋Šฅ์ ์ž…๋‹ˆ๋‹ค.

์ ์ ˆํ•œ dotnet-test-nunit ๋นŒ๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํ˜œํƒ์„ ๋ฐ›์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์— ์ •์˜๋œ ๊ณ„์•ฝ์˜ ๋Œ€๋ถ€๋ถ„์€ ์ด๋ฏธ ๋„์šฐ๋ฏธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋Š” xplat nunit ๋Ÿฌ๋„ˆ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ๊ฑฐ์˜ ์ž‘์—…์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋ ๊นŒ์š”? ์ผ์ข…์˜ "๋น ๋ฅด๊ณ  ๋”๋Ÿฝ๊ณ , ์—‰๋šฑํ•œ ํ•ดํ‚น์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ตœ์†Œํ•œ ๋ญ”๊ฐ€๋ฅผ ๊บผ๋‚ด์ž" ๋ฆด๋ฆฌ์Šค์™€ ๋‚˜์ค‘์— ๋” ์™„์ „ํ•œ ํ†ตํ•ฉ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๊นŒ?

(์˜ˆ๋ฅผ ๋“ค์–ด, netstandard1.3์˜ TFM์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•˜๋ฉด Noda Time์— ๋Œ€ํ•œ ์ฐจ๋‹จ์„ ํ•ด์ œํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.)

@jskeet ๊ณผ @NickCraver ๋Š” @rprouse๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ NUnitlite "hack"์„ ํ†ตํ•ด ์˜ค๋Š˜ NUnit์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Npgsql์— ๋Œ€ํ•ด ์ž ์‹œ ๋™์•ˆ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด ์™”์œผ๋ฉฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์ง€๋งŒ ํ™•์‹คํžˆ ์ฐจ๋‹จ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@roji : dnxcore50 ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค(์ €๋Š” ์ž ์‹œ ๋™์•ˆ Noda Time๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค) - ํ•˜์ง€๋งŒ netstandard1.3 ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด NUnit ๋ฐ NUnitLite์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@jskeet ๋‚ด ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ๋Š” netcoreapp1.0์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ Nunit+NUnitLite 3.2.1์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” "imports" : [ "dotnet54" ] ์žˆ๊ณ  ๊ทธ๊ฒƒ์€ ๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค...

@roji : ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค... ์†๊ฐ€๋ฝ์ด ์—‡๊ฐˆ

@roji : ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์•ผ ํ•  ์˜ˆ๋กœ์„œ ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์œ„์น˜์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@jskeet , ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/npgsql/npgsql/tree/dev/test/Npgsql.Tests

@jskeet ๊ฐ€์ ธ

@piotrpMSFT ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ณ  dotnet-test-nunit ์ƒ์„ฑ์„ ์œ„ํ•œ ๋„์šฐ๋ฏธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์•Œ๋ ค ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜„์žฌ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ์ถ”์  ์ค‘์ด๋ฏ€๋กœ ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ๋„ ๋ฐ”์˜์‹ค ํ…๋ฐ, ์†์— ์—†์œผ๋ฉด ์‹œ๊ฐ„์„ ๋“ค์ด์ง€ ๋ง๊ณ  ์ฐพ์•„๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•ด NUnit 3 ๋ฅผ

@jskeet ์—๋Š” project.json์— import ๋ฌธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒˆ .NET Core ํ…œํ”Œ๋ฆฟ์— ์ถ”๊ฐ€๋˜์ง€๋งŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†” ๋Ÿฌ๋„ˆ์˜ project.json์˜ ๊ฒฝ์šฐ;

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }

๋˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ;

  "frameworks": {
    "netstandard1.5": {
      "imports": "dnxcore50"
    }

RC2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ ๊ฒฝ๋กœ์— ์˜ค๋ž˜๋œ DNX ํ•ญ๋ชฉ์ด ์žˆ๋Š” ๊ฒƒ๋„ ์ €๋ฅผ ๋ฌผ๋ ธ์Šต๋‹ˆ๋‹ค. ํ™•์ธํ•  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

@rprouse : ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ…Œ์ŠคํŠธ๋Š” Windows์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Linux์—์„œ "๊ฐœ์ฒด ์ฐธ์กฐ๊ฐ€ ๊ฐœ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋กœ ์„ค์ •๋˜์ง€ ์•Š์Œ"์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. dotnet run ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ๋” ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œ ์ƒ˜ํ”Œ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค...

@jskeet , ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ ์—†์ด Windows์™€ Linux ๋ชจ๋‘์—์„œ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋ณด๋ ค๋ฉด ์—ฌ๊ธฐ ์™€ ์—ฌ๊ธฐ ๋ฅผ ์ฐธ์กฐ ํ•˜์‹ญ์‹œ์˜ค .

@oschwald : ์˜ˆ, "Object reference not set..." ๋ฌธ์ œ๋Š” ์ข…์†์„ฑ๊ณผ๋Š” ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ (์Šคํƒ ์ถ”์ ๋„ ์—†์ด) ๋„์›€์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@jskeet ๋ช‡ ๊ฐ€์ง€ ์›์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์˜ ๊ฒƒ์ž…๋‹ˆ๊นŒ? https://github.com/dotnet/cli/issues/3075

@NickCraver : ์•„๋‹ˆ์˜ค -

์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ข…์†์„ฑ ์—†์ด ์ž‘๋™ํ•˜์ง€๋งŒ ์‹คํŒจํ•˜๋Š” project.json ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™„์ „ํ•œ ์žฌํ˜„์„ ์œ„ํ•ด ์‹œ๊ฐ„์„ ๋” ํˆฌ์žํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jskeet Gotcha - ๊ด€๋ จ: https://github.com/dotnet/cli/issues/2469 ๋ฐ Slack ์ฑ„๋„ ์€ project.json ๋ผ์ด๋ธŒ ๋””๋ฒ„๊ทธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ฐธ์—ฌํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฝค ๋นจ๋ฆฌ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Slack์˜ ๊ฒฝ์šฐ #general ๋ฐ #dotnet-core ์ฑ„๋„์ด ๊ฝค ํ™œ์„ฑํ™”๋˜์–ด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ๋‹ค์Œ ์‚ฌ๋žŒ์„ ๋•์Šต๋‹ˆ๋‹ค.

ํ ... ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. @NickCraver๊ฐ€ ๋ณด๊ณ ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ dotnet restore - ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž˜๋ชป๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ๋‚˜๋Š” ์ง€๊ธˆ Linux์—์„œ Noda Time ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ yay :) ๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@piotrpMSFT ๋Š” ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ์š”์ฒญ์œผ๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ฐพ์•˜๊ณ  ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

nunit/dotnet-test-nunit#1์— dotnet-test-nunit ์ฃผ์ž์— ๋Œ€ํ•œ ์ดˆ๊ธฐ PR์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์‹คํ–‰ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ผ๋ถ€ ์ž‘์—…, ์ •๋ฆฌ ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์‹ถ๋‹ค๋ฉด ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ์— ๋Œ€ํ•œ NuGet ํ”ผ๋“œ์— ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Visual Studio์—์„œ ๋กœ๋“œํ•  ๋•Œ NuGet ํŒจํ‚ค์ง€๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” Visual Studio์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ ์„ค์ • ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@rprouse : ์œ ์šฉํ•˜๋‹ค๋ฉด Noda Time์ด ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•˜๋Š”์ง€ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ ํ™•์ธํ–ˆ์œผ๋ฉด ํ•˜๋Š” ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๋ชจ๋“  ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์•„์ง ๋ณธ๊ฒฉ์ ์ธ ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์ฝ˜์†”๊ณผ Visual Studio์—์„œ NUnit .NET Core ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•ŒํŒŒ๋ฅผ ์–ป๊ธฐ ์ „์— ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์ง€๋งŒ, ์—ด์‹ฌํžˆ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ณ  ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ์ด์ œ ํ›จ์”ฌ ๋” ๊ฐ€๊นŒ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ CI ๋นŒ๋“œ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ํƒ€์ด์–ด๋ฅผ ๋ฐœ๋กœ ์ฐจ๊ณ  ๋ฌธ์ œ๋ฅผ ์ฐพ๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์Šคํฌ๋ฆฐ์ƒท์ด ์žˆ์Šต๋‹ˆ๋‹ค.

image

@rprouse : CI ๋นŒ๋“œ์— ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ™•์‹คํžˆ ํƒ€์ด์–ด๋ฅผ ๊ฑท์–ด์ฐจ๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค. Noda Time์€ _ํ•ฉ๋ฆฌ์ ์ธ_ ์ˆ˜์˜ NUnit ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์–ด์จŒ๋“  ์ข‹์€ ์‹œ์ž‘์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. VS์—์„œ ๋‹ค์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์ •๋ง๋กœ ๊ณ ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (Roslyn์šฉ NCrunch ๋ฐ CodeRush๋„ ์ถœ์‹œ๋˜๋ฉด ์ง€์›์„ ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค...)

@jskeet ๋ฐ ์•ŒํŒŒ๋ฅผ ์ถœ์‹œํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ๋„์™€์ฃผ๊ณ  ํƒ€์ด์–ด๋ฅผ ๊ฑท์–ด์ฐจ๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด dotnet-test-nunit ๋ถ„๊ธฐ์˜ ๋ฐ๋ชจ ์ €์žฅ์†Œ ๋ฅผ dotnet-test-nunit ๋Ÿฌ๋„ˆ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

nunit/dotnet-test-nunit ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—์„œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•˜์„ธ์š”.

๋†’์€ ์ˆ˜์ค€์˜ ์ง€์นจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: ์ด์ œ dotnet-test-nunit ๋ฅผ NuGet์—์„œ ์•ŒํŒŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Include prereleases ํ•˜์„ธ์š”. ๋” ์ด์ƒ nuget.config ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

dotnet-test-nunit ๋Š” ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ฏ€๋กœ NUnit CI NuGet ํ”ผ๋“œ์—์„œ NuGet ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋ฉด NuGet.Config ํŒŒ์ผ์„ ์†”๋ฃจ์…˜์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ project.json ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ.json

{
    "version": "1.0.0-*",

    "dependencies": {
        "NUnitWithDotNetCoreRC2": "1.0.0-*",
        "NETStandard.Library": "1.5.0-rc2-24027",
        "NUnit": "3.2.1",
        "dotnet-test-nunit": "3.4.0-alpha-1"
    },
    "testRunner": "nunit",

    "frameworks": {
        "netstandard1.5": {
            "imports": [
                "dnxcore50",
                "netcoreapp1.0",
                "portable-net45+win8"
            ]
        }
    },

    "runtimes": {
        "win10-x86": { },
        "win10-x64": { }
    }
}

์—ฌ๊ธฐ์„œ ๊ด€์‹ฌ ์žˆ๋Š” ๋ผ์ธ์€ dotnet-test-nunit ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ž…๋‹ˆ๋‹ค. -CI ๋๋‚˜๋Š” ์ตœ์‹  ์‹œํ—˜ํŒ ๋ฒ„์ „์„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ด๋Š” master ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. NUnitWithDotNetCoreRC2 ์ข…์†์„ฑ์€ ํ…Œ์ŠคํŠธ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

NUnit 3์„ ํ…Œ์ŠคํŠธ ์–ด๋Œ‘ํ„ฐ๋กœ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด "testRunner": "nunit" ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ…Œ์ŠคํŠธ ์–ด๋Œ‘ํ„ฐ์™€ NUnit์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ runtimes ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

์ด์ œ Visual Studio ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ช…๋ น์ค„์—์„œ dotnet test ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# Restore the NuGet packages
dotnet restore

# Run the unit tests in the current directory
dotnet test

# Run the unit tests in a different directory
dotnet test .\test\NUnitWithDotNetCoreRC2.Test\

๊ฒฝ๊ณ 

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ์œ„์— ๋‚˜์—ด๋œ dotnet-test-nunit ๋ฒ„์ „ 3.3.0.39-CI์—๋Š” TestResult.xml ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ ArgumentException ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ dotnet ๋ช…๋ น์ค„์€ ๋นˆ ์ค„์„ ์‚ผํ‚ค๊ณ  ์ƒ‰์ƒ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NUnit ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ์˜ ์ถœ๋ ฅ์€ ์ƒ‰์ƒ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€๋งŒ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

"๋นˆ ์ค„ ์‚ผํ‚ค๋Š”" ๋ถ€๋ถ„์€ ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค: https://github.com/dotnet/cli/issues/2234

@jskeet ๋งํฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰์ƒ๋„ ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ArgumentException ๊ฐ€ 3.3.0.49-CI ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ง€์นจ์„ ์ˆ˜์ • ์‚ฌํ•ญ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๋Ÿฌ๋„ˆ์— ํ…Œ์ŠคํŠธ์˜ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Visual Studio ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํด๋ฆญํ•ด๋„ ์ฝ”๋“œ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

--where ๋“ฑ๊ณผ ๊ฐ™์€ ๋ช…๋ น์ค„ ์ธ์ˆ˜ ์ง€์›์ด ์•„์ง ์—†๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ? (์ดˆ์ฐฝ๊ธฐ๋ผ๋Š” ๊ฒƒ์„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ธ์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ project.json ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ๊ทธ๋Œ€๋กœ ํฌํ•จ์‹œ์ผฐ์ง€๋งŒ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์Šคํฌํ†ฑ ๋Ÿฐํƒ€์ž„๋„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์œผ๋ฏ€๋กœ ๋‘ ๊ฐœ์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋Œ€์ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • netcoreapp1.0 ๋Œ€์‹  netstandard1.5
  • "type"="platform" ์™€ ํ•จ๊ป˜ Microsoft.NETCore.App ์ข…์†์„ฑ์„ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์—„๋งˆ, ๋Ÿฐํƒ€์ž„ ์„น์…˜์ด ์—†์Šต๋‹ˆ๋‹ค. (์•„๋งˆ๋„ ์œ„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋กœ ์ธํ•ด...)
{
  "buildOptions": {
    "keyFile": "../../NodaTime Release.snk",
    "embed": {
      "include":  [   
        "TestData/*"
      ]
    }
  },

  "configurations": {
    "Debug": {
      "buildOptions": {
        "define": [ "DEBUG", "TRACE" ]
      }
    },
    "Release": {
      "buildOptions": {
        "define": [ "RELEASE", "TRACE" ],
        "optimize": true
      }
    }
  },

  "dependencies": {
    "NodaTime": { "target": "project" },
    "NodaTime.Testing": { "target": "project" },
    "NUnit": "3.2.1",
    "dotnet-test-nunit": "3.3.0.49-CI",
    "Microsoft.CSharp": "4.0.1-rc2-24027",
    "System.Dynamic.Runtime": "4.0.11-rc2-24027",
    "System.Reflection.Extensions": "4.0.1-rc2-24027",
    "System.Xml.XDocument": "4.0.11-rc2-24027"
  },

  "testRunner": "nunit",

  "frameworks": {
    "net451": {
      "frameworkAssemblies": {
        "System.Runtime": "",
        "System.Threading.Tasks": "",
        "System.Xml.Linq": ""
      }
    },
    "netcoreapp1.0": {
      "imports" : [ "dnxcore50", "netcoreapp1.0", "portable-net45+win8" ],
      "buildOptions": {
        "define": [ "PCL" ]
      },
      "dependencies": {
        "Microsoft.NETCore.App": { 
          "version": "1.0.0-rc2-3002702",
          "type": "platform"
        },
        "System.Console": "4.0.0-rc2-24027",
      }
    }
  }
}

๊ฒฐ๊ณผ:

Test Count: 15141, Passed: 15141, Failed: 0, Inconclusive: 0, Skipped: 0

์šฐํŠธ. (net451์„ ์‚ฌ์šฉํ•˜์—ฌ 15646์˜ ํ…Œ์ŠคํŠธ ์นด์šดํŠธ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ œ๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

๋‹ค์Œ์œผ๋กœ: Linux ์‹œ์Šคํ…œ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ project.json์€ Linux๋ฅผ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ • ์—†์ด๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. dotnet CLI๋Š” ๋‹ค์†Œ ํ˜‘์†Œํ•ฉ๋‹ˆ๋‹ค).

ํ . 14๋ถ„ ๋™์•ˆ CPU๋ฅผ 100% ์†Œ๋ชจํ•œ ํ›„์—๋„ Linux์—์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ณณ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@jskeet

--where ๋“ฑ๊ณผ ๊ฐ™์ด ์•„์ง ๋ช…๋ น์ค„ ์ธ์ˆ˜ ์ง€์›์ด ์—†๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ?

์ œ๋Œ€๋กœ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์ง€๋งŒ --where ์™€ ๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ฐ˜์ ์ธ ๋ช…๋ น์ค„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. nunit/dotnet-test-nunit#4๊ฐ€ ๋ชจ๋‘ ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋งŽ์€ ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ dotnet ๋ช…๋ น์˜ ๋์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด --debug ๋ช…๋ น์ค„ ์˜ต์…˜์€ dotnet-test-nunit ์†”๋ฃจ์…˜์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ ์†”๋ฃจ์…˜์—์„œ ์‹คํ–‰ํ•˜๋ฉด dotnet-test Error: 0 : Microsoft.DotNet.Cli.Utils.CommandUnknownException: No executable found matching command "dotnet-test-" ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ง€์›๋˜๋Š” ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋„์›€๋ง ๋ช…๋ น์ค„์„ ์šฐ๋ฆฌ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋™์•ˆ https://github.com/nunit/dotnet-test-nunit/blob/master/src/dotnet-test-nunit/CommandLineOptions.cs ์—์„œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ช…๋ น์ค„ ์˜ต์…˜์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›:์Šค๋งˆ์ผ:

์•„, ์˜ˆ - dotnet test ์—๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ์ธ์ˆ˜๋ฅผ dotnet test ์ž์ฒด์— ๋Œ€ํ•œ ์ธ์ˆ˜์—์„œ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ dotnet run ์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋…ธ๋ ฅํ–ˆ๋‹ค

dotnet test -- --help

๊ทธ๋ฆฌ๊ณ 

dotnet test -- --where=cat!=Slow

๊ทธ๋ƒฅ ์‚ฌ์šฉ

dotnet test --where=cat!=Slow

์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์ œ์ถœํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๋ช…ํ™•ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ฝ”๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ์ด์ œ 3.3.0.60-CI ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์•ŒํŒŒ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ด๋ฉฐ ์ด ์‹œ์ ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  ์ƒˆ ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ถ”์ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [x] nunit/dotnet-test-nunit#22 ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ์— ๋ฉ”์‹œ์ง€ ๋ฐ ์Šคํƒ ์ถ”์  ์ถ”๊ฐ€
  • [x] nunit/dotnet-test-nunit#12 TestContext.WriteLine์ด TestExplorer ํ…Œ์ŠคํŠธ ์š”์•ฝ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ

์ฐธ๊ณ ๋กœ ์˜ค๋Š˜ Ubuntu ์ƒ์ž์—์„œ Noda Time ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ์œผ๋ฉฐ ์•ฝ 15๋ถ„ ํ›„์— ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Win10 i7๋ณด๋‹ค Linux i5์—์„œ ๋ชจ๋‘ 5-6๋ฐฐ ๋Š๋ฆฌ๊ฒŒ ์‹คํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด CPU์™€ ์–ผ๋งˆ๋‚˜ ๊ด€๋ จ์ด ์žˆ๊ณ  JIT์™€ ์–ผ๋งˆ๋‚˜ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ NUnit์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. :)

@jskeet ์—…๋ฐ์ดํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค. nunit/dotnet-test-nunit#9์— ํ‘œ์‹œ๋œ ๋Œ€๋กœ Linux ํ…Œ์ŠคํŠธ์— ๋ชจ๋…ธ ๋ฐ”์ธ๋”ฉ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๊นŒ?

ํ…Œ์ŠคํŠธํ•˜๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•ด ์ตœ์‹  NuGet ํŒจํ‚ค์ง€๋Š” 3.3.0.69-CI ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜์‹ญ์‹œ์˜ค. ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฐจ๋‹จํ•  ๋งŒํผ ์‹ฌ๊ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ์— ๋ณด๊ณ ๋œ ๊ฒƒ์ด ์—†์œผ๋ฉด ์ด๋ฒˆ ์ฃผ ๋ง์ด๋‚˜ ๋‹ค์Œ ์ฃผ ์ดˆ์— ์•ŒํŒŒ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  ํ–ฅํ›„ ํ† ๋ก /๋ฌธ์ œ๋Š” dotnet-test-nunit ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๊ณ„์†๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์˜์›ํžˆ ํ‰ํ™”๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค :์Šค๋งˆ์ผ:

@rprouse : Mono์—์„œ ์‹คํ–‰์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Linux์˜ .NET Core ์ „์šฉ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์ •ํ™•ํ•œ project.json์—์„œ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

69-CI์— ์†Œ์šฉ๋Œ์ด๋ฅผ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค...

์ด๊ฒƒ๊ณผ ์ฝ˜์†” ์•ฑ ๋Ÿฌ๋„ˆ ์‚ฌ์ด์— ๋‚ด๊ฐ€ ์•Œ์•„์ฐจ๋ฆฐ ํ•œ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ "dotnet test" ๋ฒ„์ „์€ ์ „์ฒด ๊ธฐ๊ฐ„์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ๋Š” ๋ฐ ์†Œ์š”๋œ ์‹œ๊ฐ„์„ ํฌํ•จํ•˜๋Š” ๋ฐ˜๋ฉด NUnitLite์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ–ˆ๋˜ "dotnet run" ๋ช…๋ น์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. . Noda Time์—์„œ ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ --where=cat==Foo ์‹คํ–‰ํ•˜๋ฉด(ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ์— ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์Œ) "dotnet test"๋Š” 14์ดˆ์˜ ๊ธฐ๊ฐ„์„ ๋ณด๊ณ ํ•˜๋Š” ๋ฐ˜๋ฉด "dotnet run"์€ 0.01์ดˆ์˜ ๊ธฐ๊ฐ„์„ ๋ณด๊ณ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ฑฐ์˜ ๋™์ผํ•œ ์‹ค์ œ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜๋„์ ์ธ๊ฐ€? ๋‚˜๋Š” ํ™•์‹คํžˆ ๊ทธ ํ–‰๋™์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ๋Š๋ฆฌ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋„๋ก ์–ด๋”˜๊ฐ€์— ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@jskeet ์ข‹์€ ๊ด€์ฐฐ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ „์ฒด NUnit ์—”์ง„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ๋” ๋‹จ์ˆœํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์‹คํ–‰์„ ๋ž˜ํ•‘ํ•˜๋Š” ๋Œ€์‹  ์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ์‹œ์ž‘ ์ด๋ฒคํŠธ์—์„œ ์‹œ๊ณ„๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ž…๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

https://www.nuget.org/packages/dotnet-test-nunit/3.4.0-alpha-1 ์˜ GitHub์—์„œ dotnet-test-nunit ์•ŒํŒŒ ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์Šคํ–ˆ์œผ๋ฏ€๋กœ ๋” ์ด์ƒ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. NuGet.config ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  CI ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์•ŒํŒŒ๊ฐ€ ๋‚˜์™”์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. https://github.com/nunit/dotnet-test-nunit/issues ์—์„œ ์•ŒํŒŒ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•˜๋„๋ก ๋„์™€์ฃผ์„ธ์š”

dotnet-test-nunit ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด์˜ ์„ค๋ช…์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

https://github.com/nunit/dotnet-test-nunit

์ด์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด "Microsoft.NETCore.App" ์ข…์†์„ฑ์— ๋Œ€ํ•ด "type": "platform" ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. xUnit ๋ฌธ์„œ๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์ด ์„ ํ˜ธ๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Travis๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์ค‘์ธ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…น์ƒ‰์ด ๋˜๋ฉด Noda Time์ด ์ด์— ์˜์กดํ•˜๋ฏ€๋กœ _์ผ๋ถ€_ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค ์„ ์ƒ๋‹˜...

์ œ๊ฐ€ ์ง€๊ธˆ ๋ง‰ ์•Œ์•„์ฐจ๋ฆฐ ํ•œ ๊ฐ€์ง€ ๋‹จ์ ์€ ์ œ๊ฐ€ ๋” ์ด์ƒ Linux์—์„œ Mono๋กœ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด NUnit ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ https://github.com/dotnet/cli/issues/3073 ์˜ ํ‘œํ˜„์ด์ง€๋งŒ NUnit์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์ด ๊ฒฐ๊ตญ ๊ณ ์น  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค. ์ž ์‹œ ๋™์•ˆ ๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ๋‚ดํ‚ค์ง€ ์•Š๊ณ  Travis์—์„œ ๋‚ด ๋ชจ๋…ธ ํ…Œ์ŠคํŠธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ( dotnet test ๋Š” ํ™•์‹คํžˆ ๋ฏธ๋ž˜์ž…๋‹ˆ๋‹ค.)

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