nunitã®æ°ããã¯ããŒã³ãååŸããWindows 10Professionalã§å®è¡ãããŠããææ°ã®NUnit3ãã¹ãã¢ããã¿ãŒïŒ3.10ããã¹ãã®äžŠåå®è¡ïŒã䜿çšããŠVisual Studio 2017ïŒã³ãã¥ããã£15.7.4ïŒã§ãœãªã¥ãŒã·ã§ã³ãéãã[ãããã°-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
èšå®ãããŠããŸãïŒç§ã®å¯äžã®ããããç§ã®åŽã®èšå®ãæªãããã«ãããçš®ã®ç«¶åç¶æ
ããããšæããŸããïŒ
2çªç®ã®ãšã©ãŒïŒ
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ã«ã¯äœãèšåãããŠããªããããã¬ããŒãã«äŸ¡å€ããããšèããŸããã
ã¬ããŒãããããšãããããŸãïŒ TestCaseSourceCanAccessWorkDirectory
ãšCommandLineTests
ããã¹ããšã¯ã¹ãããŒã©ãŒã§æ©èœããªãããšã確èªããŸããã ã©ã³ããŒã䞊ååŠçããç¬ç«ãããæ¹æ³ãèãåºãå¿
èŠããããŸãã @ nunit / framework-teamäœãã¢ã€ãã¢ã¯ãããŸããïŒ
2çªç®ã®ãšã©ãŒã«ã€ããŠã¯ãããã¯å èŠãã¹ãã§ãã ããã5ã«äžããã®ã¯çã«ããªã£ãŠããŸãã
以åã¯ãNUnitãã¹ãã«ãã¹ããšã¯ã¹ãããŒã©ãŒã䜿çšããªãããã«æ瀺ããŸããã ä»ã®ããŒã ã¡ã³ããŒã¯ããã¹ããšã¯ã¹ãããŒã©ãŒããå€ãã®äººã«ãšã£ãŠããã¹ããå®è¡ããããã®ããã©ã«ãã®æ¹æ³ã«ãªã£ãŠãããšèšã£ãŠå察ããŠããŸãã
ãã¹ããã¬ãŒã ã¯ãŒã¯ããã¹ããããšãã«ç¹å®ã®ã©ã³ããŒã圹ã«ç«ããªããšããåäŸã¯ç¢ºãã«ååã«ãããŸãã ãã¹ãäžã®ãã¬ãŒã ã¯ãŒã¯ã®ãã¹ãã¯éåžžã«ç¹æ®ãªç¶æ³ã§ãããã»ãšãã©ã®ãŠãŒã¶ãŒãééããç¶æ³ã§ã¯ãããŸããã OTOHãããŒã ãæããªããã¢ããã¿ãŒãä»ããŠãã¹ããšã¯ã¹ãããŒã©ãŒã§æ£åžžã«å®è¡ã§ããããã«ããããšãç®æšã«ãããããããŸããã
äœãããã«ããŠãããã¹ããšã¯ã¹ãããŒã©ãŒã§NUnitãã¹ããå®è¡ããŠãçŸåšã¯æ©èœããªãããšã人ã ã«äŒããããã¥ã¡ã³ããäœæããå¿ èŠããããšæããŸãã ãã®æèã§ããããæ©èœãããããšãç®æšã§ãããããããåªå äºé ã§ã¯ãªããã®ã©ã¡ããã決å®ãããŠããããšã圌ãã«äŒããããšãã§ããŸãã
ã¢ããã¿ãŒã®æåã®äœæè ã§ããããã¬ãŒã ã¯ãŒã¯ãžã®é·å¹Žã®è²¢ç®è ãšããŠãç§ã¯åžžã«NUnitã®éçºã«ããããã¹ããšã¯ã¹ãããŒã©ãŒã®äœ¿çšãéé£ããŠããŸããã ããã¯ãŸã ãã®åé¡ã«é¢ããç§ã®èŠè§£ã§ãã ã¡ãªã¿ã«ãä»ã¯ã³ã³ãœãŒã«ã䜿çšããŠCIã®ãã¬ãŒã ã¯ãŒã¯ããã¹ãããã®ã奜ãã§ã¯ãããŸãã!!!
決å®ãã©ãã§ãããã¢ããã¿ãŒãåå ã§ãããã©ããã«ããããããåé¡ãçºçããå Žåã¯ãå®éã®NUnitã©ã³ããŒïŒNUnitLiteãŸãã¯ã³ã³ãœãŒã«ã©ã³ããŒïŒã«ãŠãŒã¶ãŒãéãè¿ãå¿ èŠããããšæããŸãã ã¢ããã¿ãŒã¯ãNUnitãããžã§ã¯ãã®äžã«ããå Žåã§ããåºæ¬çã«ãµãŒãããŒãã£ã®ã©ã³ããŒãšåçã§ãã
å€ããèŠãFWIWïŒææžåãããŠããéããã©ã¡ãã®æ¹æ³ã§ã«ãããããã¯ç§ã«ã¯é¢ä¿ãããŸããã
ç®±ããåºããŠãéçºè ãšããŠãç§ãå éšã§äœ¿çšããŠããã®ãšåãæ¹æ³ã䜿çšããŠããæ°ãããããžã§ã¯ãã«ééãããšãã«ãéåžžè¡ãããšãå®è¡ããããšããŸãã
以åã¯ããã¯ReSharperã®dotCoverã§ãããããã»ãšãã©æ©èœãããããªãŒ/ãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã®ä»£æ¿æ段ãããå Žåãã©ã€ã»ã³ã¹ã³ã¹ãã¯å°ããªã·ã§ãã/åã ã®éçºè ã«ãšã£ãŠã¯çã£ãŠããã®ã§ãç§ãã¡ã¯ããããããããšããŠããŸãã
çµ±åéçºç°å¢ã®æŠå¿µã«ã¯ïŒç§ã®æèŠã§ã¯ïŒå€ãã®ããšããããŸããã¯ãŒã¯ãããŒããé£ã³åºãå¿ èŠããªãããšã¯éåžžã«äŸ¿å©ã§ãããããç§ãã¡ããããè¡ãçç±ã§ãã
ãã ããç§ã®é ã®äžã§åé¡ã®ãªãã³ã³ãœãŒã«ã©ã³ããŒïŒãŸãã¯ä»ã®ã©ã³ããŒïŒã䜿çšããããšãäºæ³ãããå Žåã¯ããããææžåããŠãã ããã
NUnitã§éçºãããã¬ãŒã ã¯ãŒã¯ã§äœæ¥ããŠããå Žåãç¹å¥ãªæ¹æ³ïŒRïŒãç¬èªã®ã¢ããã¿ãŒïŒã§åŠçãè¡ãã©ã³ããŒãæ··åšããããšãåé¡ãæ··ä¹±ããå¯èœæ§ããããšæããŸãã ã©ã³ããŒã§ãã¹ãããåã«ããã¬ãŒã ã¯ãŒã¯ãåç¬ã§æ£ããæ©èœããããšãç¥ãããã§ãã ãã®ãããç§èªèº«ã®ä»äºã§ã¯ãCIãéçºããŠããŒã«ã«ã§å®è¡ãããšãã«ãnunitliteã䜿çšããŠãã¹ãããŸãã ãã¹ããšã¯ã¹ãããŒã©ãŒã§NUnitãéçºãããå Žåã¯ãCIãããŒã«ã«ã§å®è¡ããåé¡ãããããã«èŠããå Žåã¯nunitliteãŸãã¯nunit3-consoleã«ãã©ãŒã«ããã¯ããå¿ èŠããããŸãã
ç¹å®ã®ãªãªãŒã¹ããnunitãã¹ããå®è¡ããŠããã ãã®äººã«ãšã£ãŠã¯ããã£ãšèªç±åºŠããããšæããŸãã
CIãæ£èŠåããå¿ èŠããããŸããããããããã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ãã¹ãã«NUnitLiteã䜿çšãã次ã«ã³ã³ãœãŒã«ãVSTestã¢ããã¿ãŒããšã³ãããŒãšã³ããã¹ãã«UWPã©ã³ããŒã䜿çšããŸãã
CIãå®å®ããŠãããšä»®å®ãããšãTest ExplorerãReSharperãNCrunchãããã³CIã¹ã¯ãªããã®éã«åŸ®åŠãªéããããã°åé¡ãªãããã§ãã ãããã®IDEå ããŒã«ãç¡èŠããå¿ èŠããããšèšãããšã¯ãç§ãè²¢ç®ãžã®éå£ãšèŠãªããŠããããšã§ãããããã¯ç§ã®ã¯ãŒã¯ãããŒã§ããªãããã誀ãã§ãã ç§ã®çæ³çãªã¯ãŒã¯ãããŒïŒ
.\build.ps1 -t test
ãå®è¡ããŠãåæ Œãšäžåæ ŒãæåŸ
ã©ããã§ããããšã確èªããŸããã¹ããã©ã³ããŒã«äŸåããªããšãããŸããªã·ããªãªã§ã¯ããã¹ããã©ã³ããŒã«äŸåããªãããã«ããã®ãé£ãããã©ããã¯ããããŸããã ããã¯ãReSharperããã³NCrunchã·ã£ããŠã³ããŒã«å¯ŸããŠåŸ©å åãæãããILMergeçšã«äœæããçµ±åãã¹ããããæªãããšã¯ãããŸããã
@aolszowkaç§ã¯ãç§ãã¡ãäœãããã«ããŠããæçš¿ããã¥ã¡ã³ãã䜿ããããææ°ã®ç¶æ ã«ä¿ã€ããšã§ãæçš¿è ã®æéãå°éããå¿ èŠããããšããããªãã®æèŠã«100ïŒ åæããŸãã
@ jnm2ç§ã¯ããªãã®ãæšæºçãªãã¢ãããŒãã奜ãã§ãã ãã¹ããšã¯ã¹ãããŒã©ãŒã§ãã¹ãŠãã¹ã ãŒãºã«åäœãããã®ã¯ç°¡åãã©ããã¯çåã§ãããè©ŠããŠã¿ã䟡å€ã¯ãããŸãã
nunitã§äœæ¥ããŠãã人ã«ãšã£ãŠãããäœãã¬ãã«ã®ãã¹ãã«ãã€åãæ¿ããããç¥ãããšã¯ãäŸç¶ãšããŠæçšã§ãããäžå¯æ¬ ã§ãã
ãã®ã¢ã€ãã¢ãåé²ãããããã«ç§ãã¡ãã§ããæ倧ã®ããšã¯ãIMOã¯ãå¥åã®ã·ã¹ãã ãšããããçµ±åãã¹ãã確ç«ããããšã§ãã
ãããæ ¹æ¬çãªåå ã§ããå¯èœæ§ããããŸãã FrameworkControllerããXMLãååŸããããã®ãã¹ããäœæããŠãããšãã«ã TestContext.WorkDirectory
ãC:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE
å€æŽãããŠããããšã«æ°ä»ããŸããã
ã³ãŒã«ã¹ã¿ãã¯ïŒ
> 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
ãéçãªå¯å€ç¶æ
ã§ããããã§ãã
ã€ãŸããåæãã¹ããå«ããã¹ãŠã®ãã¹ãïŒïŒïŒã§å
±æãããŸãã WorkDirectoryã«äŸåãããã¹ããæ£ããè¡ãã«ã¯ã [NonParallelizable]
ããŒã¯ãä»ããå¿
èŠããããŸãã
ç§ã¯ãã£ãšåã«ãã®åé¡ã«æ°ã¥ããŸããã ã©ããã«åé¡ããããŸãã
NonParallelizableã¯ååã§ã¯ãããŸããã ããããã®ãã¹ããWorkDirectoryãå€æŽããå ŽåïŒå€ãã®NUnitãã¹ããè¡ââãããã«ïŒãããã«äŸåããä»ã®ãã¹ãã倱æããå¯èœæ§ã¯ååã«ãããŸãã
ããã¯ãã¹ãŠããã¹ããå®è¡ãããé åºã«äŸåããŸããããã¯ãNUnitã§ã¯å®çŸ©ãããŠããŸããã
äœæ¥ãã£ã¬ã¯ããªã¯äžåºŠèšå®ããå®è¡äžã¯å€æŽããªãã§ãã ããã ãã以å€ã¯ãã°ã§ãã
å®è¡ã³ã³ããã¹ãããšã«ç¬ç«ããäœæ¥ãã£ã¬ã¯ããªãèš±å¯ã§ããªãçç±ã¯ãããŸããïŒ
@CharliePooleã©ãããã°ãããå®çŸã§ããŸããïŒ ãã¬ãŒã ã¯ãŒã¯ã¯ãã³ã³ãããŒã©ãŒå®è¡å ã§å®è¡ãããã³ã³ãããŒã©ãŒã§ããFrameworkControllerããã¹ããããããç§ãã¡ã¯ç¹å¥ãªç«å Žã«ãããŸãã
ãã¹ãã¯å¥ãšããŠã WorkDirectory
ã®æå³ã¯ããå®è¡çšã®ãã¹ãŠã®åºåãã¡ã€ã«ãåä¿¡ããããã«ãŠãŒã¶ãŒãèšå®ãããã£ã¬ã¯ããªãã§ãã ãããã£ãŠããã¹ãã§å€æŽã§ããªãããã«ããå¿
èŠããããŸãã
ç§ãã¡èªèº«ã®ãã¹ãã§ã¯ããããèšå®ã§ããå¿ èŠããããŸãããæ£ããå®è¡ããã°ããã®èšå®ãä»ã®ãã¹ãã«åœ±é¿ãäžããããšã¯ãããŸããã ç§ãã¡ã¯ãããããããæ£ããè¡ã£ãŠããŸããã ð
ãã³ãã§ã¯ãå€æŽã§ããªãããã«ããŠããã¹ããåæ¢ããããšãã§ããŸãã <ducks>
ããã¯å®éã«ã¯ã¯ãŒã«ãªã¢ã€ãã¢ã§ã-éçãã£ãŒã«ããèšå®ãããŠãããã©ããã远跡ãããã®åŸã¯èšå®ãã¹ãããããŸããïŒ ããããã°ãããã¯å€æŽã§ããã DefaultTestAssemblyBuilder
ããããèšå®ãããã©ããããã§ãã¯ãããã¹ãã衚瀺ãããªãã®ã§ãåé¡ãªãã¯ãã§ãã
ãããå€æŽããNUnitãã¹ãããããå€æŽã§ããªãããã«ãããšå€±æããå¯èœæ§ããããŸãã
@oznetmasteræ€çŽ¢ããŸããããå¶ç¶ãé€ããŠããããå€æŽããNUnitãã¹ããèŠã€ãããŸããã§ããã äœã䟿å©ãªãã®ã¯ãããŸããïŒ
ã¢ãŒã«ã€ããæ€çŽ¢ããå¿ èŠããããŸãã
ãã§ã«èª¬æããããšãå®è¡ããŠãCFãã«ãã®åé¡ãä¿®æ£ããŸããã å€ã®èšå®ã¯1åã®ã¿ã§ãã 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ã§ãã£ãŠãïŒã
ããããææããŠããã ãããããšãããããŸãã ééã