Nunit: ์ƒˆ ํด๋ก  ํ›„ nunit.framework.tests์—์„œ ์‹คํŒจํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ

์— ๋งŒ๋“  2018๋…„ 06์›” 25์ผ  ยท  31์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: nunit/nunit

๋ฐฉ๊ธˆ nunit์˜ ์ƒˆ๋กœ์šด ํด๋ก ์„ ์žก๊ณ  Windows 10 Professional์—์„œ ์‹คํ–‰๋˜๋Š” ์ตœ์‹  NUnit 3 ํ…Œ์ŠคํŠธ ์–ด๋Œ‘ํ„ฐ(3.10 with Run Tests in Parallel)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Visual Studio 2017(์ปค๋ฎค๋‹ˆํ‹ฐ 15.7.4)์—์„œ ์†”๋ฃจ์…˜์„ ์—ด๊ณ  "Debug-AnyCPU"๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. "ํ•˜๊ณ  ๋นŒ๋“œ๋ฅผ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค.

BUILDING.md๋ฅผ ์ฝ์€ ํ›„ nunit.framework.tests-* ๋ฐ nunitlite.tests-*์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฒŒ์ดํŠธ์—์„œ nunit.framework.tests-*์—์„œ 2๊ฐœ์˜ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜:

Test Name:  TestCaseSourceCanAccessWorkDirectory("C:\\Users\\ace.olszowka\\source\\nunit\\bin\\Debug\\net20")
Test FullName:  NUnit.Framework.TestContextTests.TestCaseSourceCanAccessWorkDirectory("C:\\Users\\ace.olszowka\\source\\nunit\\bin\\Debug\\net20")
Test Source:    C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\TestContextTests.cs : line 110
Test Outcome:   Failed
Test Duration:  0:00:00.001

Result StackTrace:  at NUnit.Framework.TestContextTests.TestCaseSourceCanAccessWorkDirectory(String workDirectory) in C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\TestContextTests.cs:line 112
Result Message: 
Expected string length 34 but was 50. Strings differ at index 34.
  Expected: "C:\\Users\\ace.olszowka\\source\\nunit"
  But was:  "C:\\Users\\ace.olszowka\\source\\nunit\\bin\\Debug\\net20"
  -------------------------------------------------^

์†Œ์Šค๋ฅผ ๋ณด๋ฉด ์ด ๊ฐ’์ด ๋™์ผํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค( _workDirectory ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ TestContext.CurrentContext.WorkDirectory ). ์•„๋งˆ๋„ ๋‚ด ์ชฝ์˜ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•ด ์ผ์ข…์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋‘ ๋ฒˆ์งธ ์˜ค๋ฅ˜:

Test Name:  StackTracesAreFiltered("WarningInBeginInvoke",4)
Test FullName:  NUnit.Framework.Assertions.WarningTests.StackTracesAreFiltered("WarningInBeginInvoke",4)
Test Source:    C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\Assertions\WarningTests.cs : line 292
Test Outcome:   Failed
Test Duration:  0:00:00.004

Result StackTrace:  at NUnit.Framework.Assertions.WarningTests.StackTracesAreFiltered(String methodName, Int32 maxLineCount) in C:\Users\ace.olszowka\source\nunit\src\NUnitFramework\tests\Assertions\WarningTests.cs:line 310
Result Message: 
Multiple failures or warnings in test:
  1) (Warning message)
  2) Expected the number of lines to be no more than 4, but it was 5:

 1. at NUnit.TestData.WarningFixture.<>c__DisplayClass45_0.<WarningInBeginInvoke>b__0()
 2. at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
 3. at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)
 4. at System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.ThreadPoolCallBack(Object o)
 5. at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
(end)

๋‚˜๋Š” ์ด ํ…Œ์ŠคํŠธ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š”์ง€ ๊ธธ์„ ์žƒ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด ์ œํ•œ๋œ ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด ์ด ์ฝ”๋“œ๋Š” ํ˜ธ์ถœ ์Šคํƒ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋งค์šฐ ๋ฏผ๊ฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ .NET Framework์˜ ์ตœ๊ทผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ NUnitLite.Tests.CommandLineTests์—์„œ ๋ชจ๋“  ๋‹จ์ผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ธฐ๊บผ์ด ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ๊ฐ€ CI์—์„œ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ๋•Œ ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚ด ์ชฝ์˜ ๊ตฌ์„ฑ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ BUILDING.md์—๋Š” ์ด์— ๋Œ€ํ•ด ์–ธ๊ธ‰๋œ ๊ฒƒ์ด ์—†์œผ๋ฏ€๋กœ ๋ณด๊ณ ์„œ๊ฐ€ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

bug normal

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

์‹ ๊ณ  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ์—์„œ TestCaseSourceCanAccessWorkDirectory ๋ฐ CommandLineTests ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋Ÿฌ๋„ˆ์™€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. @nunit/framework-team ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‘ ๋ฒˆ์งธ ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ ๋ƒ„์ƒˆ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ 5๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

๊ณผ๊ฑฐ์—๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ NUnit ํ…Œ์ŠคํŠธ์— ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒ€์›๋“ค์€ ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ๊ฐ€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์ด ๋˜์—ˆ๋‹ค๋Š” ๋ง์— ๋ฐ˜๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์œ ์šฉํ•˜์ง€ ์•Š์€ ํŠน์ • ๋Ÿฌ๋„ˆ์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ „๋ก€๊ฐ€ ๋ถ„๋ช…ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ค‘์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ํŠน๋ณ„ํ•œ ์ƒํ™ฉ์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒช๋Š” ์ƒํ™ฉ์ด ์•„๋‹™๋‹ˆ๋‹ค. OTOH, ํŒ€์ด ์›ํ•œ๋‹ค๋ฉด ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์‚ผ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๋“ , ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ์—์„œ NUnit ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํ˜„์žฌ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋ฌธ์„œ๋ฅผ ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋งฅ๋ฝ์—์„œ ๊ทธ๋“ค์—๊ฒŒ ๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ธ์ง€, ์•„๋‹ˆ๋ฉด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฌด์—‡์ด๋“  ๊ฒฐ์ •๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋Œ‘ํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ์ €์ž์ด์ž ํ”„๋ ˆ์ž„์›Œํฌ์— ๋‹ค๋…„๊ฐ„ ๊ธฐ์—ฌํ•œ ์‚ฌ๋žŒ์œผ๋กœ์„œ ์ €๋Š” ํ•ญ์ƒ NUnit ๊ฐœ๋ฐœ์— ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋น„๋‚œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚˜์˜ ๊ฒฌํ•ด์ž…๋‹ˆ๋‹ค. ์  ์žฅ, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ CI์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์กฐ์ฐจ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค!!!

์–ด๋–ค ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋“  ์–ด๋Œ‘ํ„ฐ๋กœ ์ธํ•œ ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์„ ์‹ค์ œ NUnit ๋Ÿฌ๋„ˆ(NUnitLite ๋˜๋Š” ์ฝ˜์†” ๋Ÿฌ๋„ˆ)๋กœ ๊ณ„์† ๋ณด๋‚ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋Œ‘ํ„ฐ๋Š” NUnit ํ”„๋กœ์ ํŠธ์— ์žˆ๋”๋ผ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒ€์‚ฌ ๋Ÿฌ๋„ˆ์™€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

FWIW์—์„œ ๋‚ด๋ถ€๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ: ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋Š” ํ•œ ์ž๋ฅด๋Š” ๋ฐฉ์‹์€ ์ €์—๊ฒŒ ์ •๋ง ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ €๋Š” ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋Š” ์ผ์„ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์ฝ”๋“œ ๋ณต์ œ
  2. README.md/BUILD.md/HACKING.md ์ฝ๊ธฐ
  3. ๋นŒ๋“œ ์‹œ๋„(๋ณ€๊ฒฝ ์‚ฌํ•ญ ์—†์Œ)
  4. ํ†ตํ•ฉ ๋Ÿฌ๋„ˆ๋ฅผ ํ†ตํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๋ฉด ๋ฌผ๊ฑด์„ ๊ฐ€์ง€๊ณ  ๋†€๊ธฐ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

๊ณผ๊ฑฐ์—๋Š” ์ด๊ฒƒ์ด ReSharper์˜ dotCover์˜€์„ ๊ฒƒ์ด์ง€๋งŒ "๋Œ€๋ถ€๋ถ„ ์ž‘๋™ํ•˜๋Š”" ๋ฌด๋ฃŒ/์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ๋Œ€์•ˆ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด ์†Œ๊ทœ๋ชจ ์ƒ์ /๊ฐœ๋ณ„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์—†์• ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ฐœ๋…์—๋Š” ๋งŽ์€ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ์—์„œ ํŠ€์–ด๋‚˜์˜ค์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ์ƒ๊ฐ์— ๊ดœ์ฐฎ์€ ์ฝ˜์†” ๋Ÿฌ๋„ˆ(๋˜๋Š” ๋‹ค๋ฅธ ๋Ÿฌ๋„ˆ)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์„œํ™”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

NUnit์—์„œ ๊ฐœ๋ฐœ ์ค‘์ด๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ํŠน๋ณ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Ÿฌ๋„ˆ(R#, ์ž์ฒด ์–ด๋Œ‘ํ„ฐ)๋ฅผ ํ˜ผํ•ฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฌ๋„ˆ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ „์— ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฒฉ๋ฆฌ๋œ ์ƒํƒœ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ ์ž‘์—…์—์„œ๋Š” nunitlite๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CI๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ์—์„œ NUnit์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹CI๋ฅผ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ณ  ๋ญ”๊ฐ€ ์ด์ƒํ•ด ๋ณด์ผ ๋•Œ nunitlite ๋˜๋Š” nunit3-console๋กœ ํด๋ฐฑํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ๋ฆด๋ฆฌ์Šค์—์„œ nunit ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ์ž์œ ๋„๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด NUnitLite๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ข…๋‹จ ๊ฐ„ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ์ฝ˜์†”, VSTest ์–ด๋Œ‘ํ„ฐ ๋ฐ UWP ์‹คํ–‰๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CI๋ฅผ ์ •์‹์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CI๊ฐ€ ๊ฒฌ๊ณ ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด Test Explorer, ReSharper, NCrunch ๋ฐ CI ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์— ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ IDE ๋‚ด ๋„๊ตฌ๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๋‚ด ์ž‘์—… ํ๋ฆ„๋„ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์—ฌ์— ๋Œ€ํ•œ ์žฅ๋ฒฝ์ด์ž ๊ฑฐ์ง“์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์˜ ์ด์ƒ์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ:

  1. ๊ธฐ์กด ํ…Œ์ŠคํŠธ ์ฐพ๊ธฐ ๋˜๋Š” ์ƒˆ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
  2. ํƒ€์ดํ•‘ํ•˜๋Š” ๋™์•ˆ ํ…Œ์ŠคํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์žฌ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ŠคํŠธ ํ”ฝ์Šค์ฒ˜๋ฅผ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค(๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ์ง€์†์ ์ธ ํ…Œ์ŠคํŠธ ์‹œ์ž‘).
  3. ๋ณ€๊ฒฝ ๊ตฌํ˜„
  4. Git ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— .\build.ps1 -t test ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ†ต๊ณผ ๋ฐ ์‹คํŒจ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  5. ๋†€๋ผ์›€์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์•„ ๊ณ ์ •ํ•˜๊ณ  3๋‹จ๊ณ„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๊ฐ€ ๋Ÿฌ๋„ˆ์— ๋ฏผ๊ฐํ•œ ๋“œ๋ฌธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋Ÿฌ๋„ˆ์— ๋ฏผ๊ฐํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์–ด๋ ค์šด์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ReSharper ๋ฐ NCrunch ์„€๋„ ๋ณต์‚ฌ๋ณธ์— ํƒ„๋ ฅ์ ์œผ๋กœ ๋งŒ๋“  ILMerge์— ๋Œ€ํ•ด ์ž‘์„ฑํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ณด๋‹ค ๋” ๋‚˜์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@aolszowka ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋“  ๊ธฐ์—ฌ ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•จ์œผ๋กœ์จ ๊ธฐ์—ฌ์ž์˜ ์‹œ๊ฐ„์„ ์กด์ค‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ท€ํ•˜์˜ ์˜๊ฒฌ์— 100% ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

@jnm2 ๋‚˜๋Š” ๋‹น์‹ ์˜ "์ •์‹" ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํƒ์ƒ‰๊ธฐ์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์šธ์ง€ ์˜๋ฌธ์ด์ง€๋งŒ ์‹œ๋„ํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

nunit์—์„œ ์ž‘์—…ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์–ธ์ œ ๋” ๋‚ฎ์€ ์ˆ˜์ค€์˜ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•„๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์œ ์šฉํ•˜๊ณ  ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์ด ์•„์ด๋””์–ด๋ฅผ IMO๋กœ ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ผ์€ ๋ณ„๋„์˜ ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ทผ๋ณธ ์›์ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FrameworkController์—์„œ XML์„ ๊ฐ€์ ธ์˜ค๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ TestContext.WorkDirectory ๊ฐ€ C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

https://github.com/nunit/nunit/blob/81fcc7c047c09fcb5a86989d0829716ca7d08e1e/src/NUnitFramework/framework/Api/DefaultTestAssemblyBuilder.cs#L137

ํ˜ธ์ถœ ์Šคํƒ:

>   nunit.framework.dll!NUnit.Framework.Api.DefaultTestAssemblyBuilder.Build(System.Reflection.Assembly assembly, string suiteName, System.Collections.Generic.IDictionary<string, object> options) Line 137    C#
    nunit.framework.dll!NUnit.Framework.Api.DefaultTestAssemblyBuilder.Build(string assemblyNameOrPath, System.Collections.Generic.IDictionary<string, object> options) Line 114    C#
    nunit.framework.dll!NUnit.Framework.Api.NUnitTestAssemblyRunner.Load(string assemblyNameOrPath, System.Collections.Generic.IDictionary<string, object> settings) Line 154   C#
    nunit.framework.dll!NUnit.Framework.Api.FrameworkController.LoadTests() Line 204    C#

TestContext.WorkDirectory ๊ฐ€ ์ •์  ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

https://github.com/nunit/nunit/blob/81fcc7c047c09fcb5a86989d0829716ca7d08e1e/src/NUnitFramework/framework/TestContext.cs#L96 -L101

์ฆ‰, ๋™์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ํ…Œ์ŠคํŠธ(!)์—์„œ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค. WorkDirectory์— ์˜์กดํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •ํ™•ํ•˜๋ ค๋ฉด [NonParallelizable] ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ค๋ž˜ ์ „์— ์ด ๋ฌธ์ œ๋ฅผ ์ง€์ ํ–ˆ๋‹ค. ์–ด๋”˜๊ฐ€์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

NonParallelizable๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŽ์€ NUnit ํ…Œ์ŠคํŠธ๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ๊ฐ€ WorkDirectory๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

NUnit์—์„œ ์ •์˜๋˜์ง€ ์•Š์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์˜๋„๋Š” Work ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ํ•œ ๋ฒˆ ์„ค์ •๋˜๊ณ  ์‹คํ–‰์„ ์œ„ํ•ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ๋ฏธ๊ตญ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

๊ฐ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ๋…๋ฆฝ์ ์ธ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@CharliePoole ์–ด๋–ป๊ฒŒ ๊ทธ๊ฒƒ์„ ํ˜„์‹ค๋กœ ๋งŒ๋“ค๊นŒ์š”? ํ”„๋ ˆ์ž„์›Œํฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ ์‹คํ–‰ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ธ FrameworkController๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ํŠน๋ณ„ํ•œ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  WorkDirectory ์˜ ์˜๋ฏธ๋Š” "์‹คํ–‰์„ ์œ„ํ•œ ๋ชจ๋“  ์ถœ๋ ฅ ํŒŒ์ผ์„ ์ˆ˜์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ๋””๋ ‰ํ† ๋ฆฌ"์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฒด ํ…Œ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ•ด๋‹น ์„ค์ •์ด ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜œ

ํ•€์น˜์—์„œ, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <ducks>

๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ฉ‹์ง„ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. ์ •์  ํ•„๋“œ๊ฐ€ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ์ถ”์ ํ•˜๊ณ  ๊ทธ ํ›„์— ์„ค์ •์„ ๊ฑด๋„ˆ๋›ฐ๋‚˜์š”? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ DefaultTestAssemblyBuilder ์„ค์ •ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” NUnit ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@oznetmaster ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ์‹ค์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” NUnit ํ…Œ์ŠคํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•ธ๋””๊ฐ€ ์žˆ๋‚˜์š”?

๋‚ด ๊ธฐ๋ก ๋ณด๊ด€์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋…ผ์˜ํ•œ ๋‚ด์šฉ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ด๋ฏธ CF ๋นŒ๋“œ์˜ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’์„ ํ•œ ๋ฒˆ๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. null์ธ์ง€ ํ™•์ธํ•˜๊ณ  null์ด๋ฉด ์„ค์ •ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

                if (options.ContainsKey (FrameworkPackageSettings.WorkDirectory))
                    TestContext.DefaultWorkDirectory = options[FrameworkPackageSettings.WorkDirectory] as string;
                else
                    if (TestContext.DefaultWorkDirectory == null)
                        TestContext.DefaultWorkDirectory = Directory.GetCurrentDirectory ();

๋ฌธ์ œ๊ฐ€ ๋œ ํ…Œ์ŠคํŠธ๋Š” FrameworkPackageSettings.WorkDirectory๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ์˜ต์…˜์œผ๋กœ DefaultTestAssemblyBuilder.Build๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ TestContext.DefaultWorkDirectory๋ฅผ CurrentDirectory๋กœ ๋ฎ์–ด์“ฐ๊ฒŒ ํ•˜๋Š” ํ…Œ์ŠคํŠธ์˜€์Šต๋‹ˆ๋‹ค. ์ฆ‰, WorkDirectory๊ฐ€ ์ตœ์ƒ์œ„ ์‹คํ–‰์—์„œ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ์—์„œ ๋ฎ์–ด์“ฐ์—ฌ์ง€๊ณ  ๋ณต์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๋„ ๊ฐ™์€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด CF ๋นŒ๋“œ๋Š” NUnit ํ…Œ์ŠคํŠธ๋ฅผ 100% ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

@OmicronPersei ์•ž์œผ๋กœ ๋ฉฐ์น  ์•ˆ์— ์ฃผ๋ณ€์— ์žˆ๋‹ค๋ฉด @oznetmaster ์˜ ์ˆ˜์ • ํ”„๋กœ๊ทธ๋žจ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ! ์˜ค๋Š˜ ์ €๋…์— ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค

๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” nunit3-vs-adapter#528 ๋•Œ๋ฌธ์— ์ด ๋ฒ„๊ทธ๋ฅผ ์‹ค์ œ๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด?

@OmicronPersei ์˜ค. ๋ชจ๋ฅด๊ฒ ์–ด์š”. WorkDirectory ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋œ .runsettings๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ?

์ข‹์•„, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ๋‹ค. TestCaseSourceCanAccessWorkDirectory ๋Š” ์„ฑ๊ณตํ•˜์ง€๋งŒ StackTracesAreFiltered ๋Š” OP์—์„œ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€/์Šคํƒ ์ถ”์ ์œผ๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

StackTracesAreFiltered๋ฅผ 5๋กœ ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋ ˆ์ž„์ด ์ถ”๊ฐ€๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ƒ„์ƒˆ ํ…Œ์ŠคํŠธ์ด๋ฏ€๋กœ ์ œ์–ด๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TestCaseSourceCanAccessWorkDirectory ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์—ฌ์ „ํžˆ ์ด PR์˜ ๋ฒ”์œ„์— ์žˆ์Šต๋‹ˆ๊นŒ?

ForTestCaseCanAccessWorkDirectory, @oznetmaster ์˜ ์ˆ˜์ •์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์กฐ์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฌธ์ œ์˜ ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

๊ฑฑ์ • ๋งˆ์„ธ์š”. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ทธ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ PR๋„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

์ง‘ ์ฒญ์†Œ๋ฅผ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์–ด๋–ค ์œ ํ˜•์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (WONTFIX์ผ์ง€๋ผ๋„).

์•„๋‹ˆ์š”, ์ง€์ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ์‡„.

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