NUnit 3.8.0以éãäœããã®ãããããã¯ãçºçããŠããããã§ãïŒ3.8.1ãè©ŠããŸããïŒã ç§ã®ãã¹ãã¯æ£åžžã«å®è¡ãããŸããããã¹ãŠã®ãã¹ããå®äºãããšãNUnitã¯ãã¹ãã®å®è¡ãå®äºããããââãã»ã¹ã匷å¶çµäºããããŸã§1ã€ã®CPUãæ倧ã«ãªããŸãã
ã³ã³ãœãŒã«ã©ã³ããŒãšCodeRushforRoslynã®ã©ã³ããŒã®äž¡æ¹ã§åãåé¡ãçºçããŠããŸãã
nunit-agent.exeã«ãããã¬ãŒãã¢ã¿ããããŸããããããçºçããŠããéãã¹ã¬ããã¯æ¬¡ã®ããã«ãªããŸããã¹ã¯ãªãŒã³ã·ã§ããã®ã¹ã¬ãã6488ã¯ããã¹ãŠã®CPUã䜿çšããŠããã¹ã¬ããã§ãã
@DavidZidarãã¹ãã䞊ååããæ¹æ³ã®è©³çŽ°ãè¿œå ã§ããŸããïŒ ãã£ã¯ã¹ãã£/ãã¹ãã±ãŒã¹ã«ãã£ãŠïŒ 䞊åã¢ã€ãã ãšé䞊åã¢ã€ãã ãæ··åšããŠããŸããïŒ
ããã¯ã3.8ã«ãã£ãhttps://github.com/nunit/nunit/issues/2261ã«é¢é£ããŠããå¯èœæ§ãããããã§ãã
ãã...æšæ¥ã3.8.0ã§ReSharperãä»ããŠãã¹ããå®è¡ããŠããã®ãèŠããšæããŸãã
[assembly: Parallelizable(ParallelScope.Fixtures)]
ããæ°ãã[NonParallelizable]
å±æ§ã䜿çšãã䞊åå®è¡ã§ããªãããã€ãã®ãã¹ããšçµã¿åãããŠäœ¿çšââããŠããŸãã
--workers = 1ãæå®ããŠã³ã³ãœãŒã«ã©ã³ããŒãå®è¡ããããšããŸããããéãã¯ãããŸããã§ããã
@DavidZidar
䞊åãã£ã¯ã¹ãã£ãšé䞊åã¢ã€ãã ã®çµã¿åãããéèŠã«èãããŸãã ããã€ãã®å±æ§ãåé€ããŠå®éšããåçŸå¯èœãªæå°éã®äŸãèŠã€ããããšãã§ãããã©ããã確èªã§ããã°ãéåžžã«åœ¹ç«ã¡ãŸãã
ãªãããã®çç±ã§2x [SetUp]
ã¡ãœãããš1ã€ã®[TearDown]
ãããã [OneTimeSetUp]
ãš[OneTimeTearDown]
ããããåé¡ã®ãããã©ã°ã©ãåã§ããªããã¹ããã£ã¯ã¹ãã£ã1ã€èŠã€ããŸããã ãã®ã¯ã©ã¹ãåé€ãããšãCodeRushãã¹ãã©ã³ããŒã¯æ¯åçµäºããããã«èŠããŸãããã³ã³ãœãŒã«ã©ã³ããŒã¯ãå°ãªããšã2åã¯å®äºããŸããããã»ãšãã©ã®å ŽåããªãŒãºãç¶ããŸãã
æ®å¿µãªãããæ°ãããããžã§ã¯ãã§ãã®åé¡ãåçŸããããšã¯ã§ããŸããããã®ãããžã§ã¯ãã¯ããªã倧ãããã³ãŒããå ±æããããšã¯ã§ããŸããã
ãŸãããã¹ããäœåºŠãå®è¡ããŠããã®ã§ã [NonParallelizable]
ããŒã¯ãããä»ã®ããã€ãã®ãã¹ãã¯ã䞊è¡ããŠå®è¡ãããŠããã¯ãã§ã¯ãªãã®ã«ãæã
ã©ã³ãã ã«å€±æããŸãã
ãã1ã€è©ŠããŠã¿ãŸããã [NonParallelizable]
å±æ§ãæã€23ã®ãã¹ããã£ã¯ã¹ãã£ããã¹ãŠåé€ããŸããããããã¯äºæ
ãããã«æªåãããŸããã çŸåšãCodeRushã¯ãããã¯ã¢ããããåã«ãã¹ãã®10ïŒ
ãééããããšããããŠããŸããã ã³ã³ãœãŒã«ã©ã³ããŒãã©ããŸã§å°éã§ãããããããŸããã åèšã§çŽ370ã®ãã£ã¯ã¹ãã£ãš3000ã®ãã¹ãããããŸãã
ããŒãžã§ã³3.8.0以éãåãåäœãçºçããŸããã ããŒãžã§ã³3.7.1ã«ããŠã³ã°ã¬ãŒãããåŸã ãã¹ãŠãåã³æ£åžžã«åäœããŸãã resharperãã¹ãã©ã³ããŒãšVisualStudioãã¹ãã©ã³ããŒã䜿çšããŸããã ã©ã¡ããåãåäœãããŸããã ãã¹ãŠã®ãã¹ããå®è¡ãããšãå®è¡ããããããã¯ã«é¥ã£ãããã§ãã ãã¹ããåå¥ã«å®è¡ãããšããã¹ãŠã®ãã¹ããæ£ããå®è¡ãããŸãã
ç§ã®ãã¹ãã¯æ¬¡ã®ããã«ãªããŸãã userControlãäœæããããªãºã ãã¥ãŒã¢ãã«ãã±ãŒã¿ãŒã«ãã£ãŠããŒã¿ã³ã³ããã¹ããæ£ããäœæã§ãããã©ããã確èªããã ãã§ãã
[Apartment(ApartmentState.STA)]
public class GuiCreationTests
{
private TestBootstrapper testBootStrapper;
private App app;
[SetUp]
public void SetupTests()
{
testBootStrapper = new TestBootstrapper();
testBootStrapper.Run();
if (Application.Current == null)
{
app = new App();
app.InitializeComponent();
}
}
[Test]
public void CreateMemoryViewWithDataContextCorrectly()
{
ViewShouldHaveCorrectDataContext<MemoryView, MemoryViewModel>();
}
[Test]
public void CreateSensorsViewWithDataContextCorrectly()
{
ViewShouldHaveCorrectDataContext<SensorsView, SensorsViewModel>();
}
[Test]
public void CreateRegisterViewWithDataContextCorrectly()
{
ViewShouldHaveCorrectDataContext<RegisterView, RegisterViewModel>();
}
[Test]
public void CreateRegimeViewWithDataContextCorrectly()
{
ViewShouldHaveCorrectDataContext<RegimeView, RegimeViewModel>();
}
[Test]
public void CreateFlashViewWithDataContextCorrectly()
{
ViewShouldHaveCorrectDataContext<FlashView, FlashViewModel>();
}
private void ViewShouldHaveCorrectDataContext<TView, TViewModel>()
where TView : UserControl, new() where TViewModel : BaseViewModel
{
var sut = (UserControl)new TView();
sut.DataContext.Should().NotBeNull();
sut.DataContext.Should().BeOfType<TViewModel>();
}
}
@Maradaehneãã¹ãã§äœããã®äžŠååŠçã䜿çšããŠããŸããïŒ
çŸæç¹ã§ã¯ã䞊ååŠçã¯ãªãã¯ãã ãšæããŸãã ææ¥ä»äºäžã«ãã¥ãŒã¢ãã«ãã¿ã¹ã¯ãäœæãããã©ããã確èªããå¿ èŠããããŸãã ãããããªããç¥ãããã£ãããšãªãã
ç§ã¯NUnitã®äžŠååŠçã«ã€ããŠèšåããŠããŸããã ãµã³ãã«ã³ãŒãã«ã¯ParallelAttribute
æå®ãããŠããŸããããããšãã°ãã¢ã»ã³ããªå±æ§ãšããŠãããé«ãã¬ãã«ã§ååšããå¯èœæ§ããããŸãã
ãããã ParallelAttribute
ã¯äœ¿çšããŸãã
@Maradaehneããªãã¯ããã§äžŠååŠçã«é¢ããåé¡ã«äŸ¿ä¹ããŠããŸãã ðã ããããªãã®åé¡ã¯äœãéããã®ã§ãã æåã«ããã§ããã€ãã®ä¿®æ£ãè©Šãããšãã§ããŸãããããããæ©èœããªãå Žåã¯ãå¥ã®åé¡ãæåºããå¿ èŠããããŸãã
ããªãã®åé¡ãSTAã®äœ¿çšã«é¢é£ããŠãããã TestBootstrapper
ããããåŒãèµ·ããäœããããŠããããã«ç§ã«ã¯èŠããŸãã ãã®åŒã³åºãã®ç®çã¯äœã§ããïŒ ãªããããè€æ°åå®è¡ãããã®ã§ããïŒ å®è¡ãç¶ç¶ããŸããïŒ ïŒãã®å Žåãããªãã¯ãããçµäºããå¿
èŠããããŸãïŒ
STAãWRTãããã£ã¯ã¹ãã£ã§èŠæ±ãããŠããããã«ãSTAã§å®éã«å®è¡ãããŠããããšã確èªããå°ããªãã¹ããäœæããŸãã ããããã䞊åå®è¡ããªãã®ã§ããã確èªããŸãããã
ããã«ã¡ã¯ããã¹ããNUnit3.8 +ã§ãã³ã°ãå§ããã®ã§ãããã«é£ã³ã€ããŸãã[assemblyïŒParallelizableïŒParallelScope.FixturesïŒ]ã䜿çšããŠããŸãã çŸåšã®ãšãããNonParallelizableå±æ§ã¯è©ŠããŠããŸããã
ããã圹ç«ã€ãã©ããã確èªããããã«äœ¿çšãããã»ããã¢ãããšå解ã®æ¹æ³ã調æ»ããå¿ èŠããããŸãã ãã¹ãã®ç¶æ¿ãè¡ãããŠãããããå°ãé¢åã§ãã
ãããhttps://github.com/nunit/nunit/pull/2445ã§ä¿®æ£ãããããšãé¡ã£ãŠã
誰ããä¿®æ£ããã¹ãã§ããå Žåã¯ãAppveyorããããŠã³ããŒãã§ããŸãïŒ https ïŒ//ci.appveyor.com/project/CharliePoole/nunit/build/3.9.0-ci-04450-issue-2438/artifacts
3.9.0-ci-04450-issue-2438ãã«ãããã¹ããããšãããããªãæ¹åãããŠããããã«èŠããŸããããŸã ãããŸããã
CodeRushãã¹ãã©ã³ããŒã¯æ¯åå®äºããããã§ããããã¯åé¡ãããŸãããã Parallelizable(ParallelScope.None)
å±æ§ã䜿çšãããã¹ãã®ããã€ãã¯ã©ã³ãã ã«å€±æããNUnit3.5.0ã䜿çšããŠããéãããã®ãã¹ãã¯æ°ãæéæ£åžžã«æ©èœããŠããŸãã
ã³ã³ãœãŒã«ã©ã³ããŒã¯ãŸã æã ããã¯ããŸãã
@DavidZidarã«æè¬ããŸãã @rprouseã¯ããã®PRã§ããã€ãã®è¿œå ã®åé¡ãçºèŠããŸãããç§ãã¡ã¯ãã£ãšèŠãå¿ èŠããããšæããŸãã
以åãšåãããã«ãåçŸå¯èœãªäŸãèŠã€ããããšãã§ããã°ãããã¯éåžžã«è²Žéã§ãã https://github.com/nunit/nunit/issues/2438ã§æããã«ãªã£ãåé¡ãä¿®æ£ããŸãããããã倧ããªãã¹ãã¹ã€ãŒããããŸããŸãªã·ããªãªã«ã¶ã€ããå¯èœæ§ãããããã§ãã
ãŸãã䞊è¡ããŠå®è¡ãããé䞊åãã¹ãã«ã€ããŠãèå³ããããããŸãã --trace=Verbose
ã䜿çšããŠãããã€ãã®ãã°ãäœæã§ããŸããã å¿
èŠã«å¿ããŠå¿ååã§ããŸããããããã¯ãé䞊åãã¹ãã䞊åã§å®è¡ãããŠããå Žåã«äœãèµ·ãã£ãŠãããã«ã€ããŠã®ãã¥ãŒãæäŸããã¯ãã§ãã ïŒãã°ããæ確ã«ãªããªãå¯èœæ§ããããé䞊åã«ããå¿
èŠããããã¹ããå«ããŠãã ããïŒïŒ
ç·šéïŒ3.9.0-ciãã«ãã«å¯ŸããŠãããè¡ã£ãŠãã ãã-ããŸãããã°æ£ããæ¹åã«é²ãã§ããŸãã
ç³ãèš³ãããŸããããæ確ã§ã¯ãããŸããã§ãããäžéšã®ã¢ãµãŒã·ã§ã³ã¯ã䞊è¡ããŠå®è¡ãããªãéãå®éã«ã¯å€±æããªãã¯ãã®äžéšã®ãã¹ãã§ã©ã³ãã ã«å€±æããäžéšã®ãã¹ãã§ã¯ãå®éã«ã¯å€±æããªããšãã«NullReferenceExceptionãã¹ããŒãããŸãã
ããšãã°ãäžéšã®ãã¹ãã§ã¯MVCããDependencyResolver.Current
ãæ§æããå¿
èŠãããããã®ãããªãã¹ãã®1ã€ã¯ãnullã«æ»ãããããŸãã¯ä»ã®ãã¹ãçšã«å¥ã®ãµãŒãã¹ã§åæ§æãããããã«ãªãŸã«ããŒã䜿çšããŠããå ŽåãNullReferenceExceptionã§å€±æããããšããããŸãã
質åã§ããã Parallelizable(ParallelScope.None)
ããŒã¯ããããã¹ãã¯ãããã»ã¹ããšã«çŸåšå®è¡ãããŠããå¯äžã®ãã¹ãã§ããããšãä¿èšŒãããŠããŸããïŒ ãã®ç¹å®ã®ãã¹ãã®ã»ããã¢ãããšå®è¡ã®éã«ãä»ã®ã»ããã¢ãããŸãã¯ãã£ã¢ããŠã³ã¡ãœãããåŒã³åºãããããã«æãããããã§ãã
æ確ã«ããŠããã ãããããšãããããŸãã ð
質åã§ãããParallelizableïŒParallelScope.NoneïŒã§ããŒã¯ããããã¹ãã¯ãããã»ã¹ããšã«çŸåšå®è¡ãããŠããå¯äžã®ãã¹ãã§ããããšãä¿èšŒãããŠããŸããïŒ ãã®ç¹å®ã®ãã¹ãã®ã»ããã¢ãããšå®è¡ã®éã«ãä»ã®ã»ããã¢ãããŸãã¯ãã£ã¢ããŠã³ã¡ãœãããåŒã³åºãããããã«æãããããã§ãã
ãããçè«ã§ããã¯ãã 3.8ã§ã¯ããã«ããã€ãã®åé¡ãããããã§ããããã¹ãã±ãŒã¹ã䞊è¡ããŠå®è¡ã§ããããã«å€æŽãããŠããŸãã
2ã€ã®ããšïŒ
1ïŒ Parallelizable(ParallelScope.None)
ãã©ã®ããã«äœ¿çšããŠããããæ確ã«ã§ããŸããïŒããã¯ãã¹ããã£ã¯ã¹ãã£ã§ããããããšãåã
ã®ãã¹ãã§ããïŒ
2ïŒäžèšã®ããã«-ãã°ãã¡ã€ã«ãèŠãŠããã¹ãã誀ã£ãŠäžŠè¡ããŠå®è¡ãããŠããããšãééããªãåé¡ã§ããããšã確èªã§ããã¯ãã§ãã ïŒå¯èœæ§ãéåžžã«é«ãããã«èãããŸãããããã«æãäžããåã«å確èªããããšããå§ãããŸãïŒïŒ
åã ã®ãã¹ãã§ã¯ãªãããã£ã¯ã¹ãã£ã®å±æ§ã®ã¿ã䜿çšããŠããŸã
ããã¯ãå®éã«ã¯å€±æããŠã¯ãªããªãã¢ãµãŒã·ã§ã³ã倱æãããã¹ãã®åäžã®å¿ååããããã¹ãã¹ã€ãŒãããŒãã§ãã
<test-suite type="TestFixture" id="0-1815" name="" fullname="" classname="" runstate="Runnable" testcasecount="11" result="Failed" site="Child" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.219772" total="11" passed="10" failed="1" warnings="0" inconclusive="0" skipped="0" asserts="11">
<properties>
<property name="ParallelScope" value="None" />
</properties>
<failure>
<message><![CDATA[One or more child tests had errors]]></message>
</failure>
<test-case id="0-1817" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="1397646013" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.017836" asserts="1" />
<test-case id="0-1818" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="841770727" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.012288" asserts="1" />
<test-case id="0-1816" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="419323190" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.016657" asserts="1" />
<test-case id="0-1826" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="1469933891" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.007956" asserts="1" />
<test-case id="0-1822" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="1086752121" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.021974" asserts="1" />
<test-case id="0-1824" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="1083353855" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.005639" asserts="1" />
<test-case id="0-1823" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="1593973579" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.004108" asserts="1" />
<test-case id="0-1825" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="999831506" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.022739" asserts="1" />
<test-case id="0-1819" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="2106953889" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.009117" asserts="1" />
<test-case id="0-1821" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="85741110" result="Passed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.007146" asserts="1" />
<test-case id="0-1820" name="" fullname="" methodname="" classname="" runstate="Runnable" seed="379361616" result="Failed" start-time="2017-09-18 16:01:01Z" end-time="2017-09-18 16:01:01Z" duration="0.023703" asserts="1">
<failure>
<message><![CDATA[ Expected: 0
But was: 2
]]></message>
<stack-trace><![CDATA[ at SomeTest() in SomeTest.cs:line 104
]]></stack-trace>
</failure>
<assertions>
<assertion result="Failed">
<message><![CDATA[ Expected: 0
But was: 2
]]></message>
<stack-trace><![CDATA[ at SomeTest() in SomeTest.cs:line 104
]]></stack-trace>
</assertion>
</assertions>
</test-case>
</test-suite>
èå³æ·±ãããšã«ãéå§æéãšåæ¢æéã¯ãã¹ãŠåãã§ããããããäœããæå³ãããã©ããã¯ããããŸããã NUnit3.5ã¯åãããã«åäœããããã§ãã
ç³ãèš³ãããŸãããããã°ã®ã³ã¡ã³ããã¯ã£ããããŠããªãã£ããšæããŸãã
NUnitã³ã³ãœãŒã«ã®ã³ãã³ãã©ã€ã³ã§åŒæ°--trace=Verbose
ãæž¡ããŸãã ããã«ãããå€æ°ã®.log
ãã¡ã€ã«ãäœæãããŸãããã®ãã¡ã®1ã€ã¯ãã©ã®ãã¹ããã©ã®ã¯ãŒã«ãŒã¹ã¬ããã§ã©ã®é åºã§å®è¡ãããã©ã®ããã«äžŠååããããã詳ãã説æããŸãã è§æ¬åŒ§å
ã®çªå·ã¯ãã¯ãŒã«ãŒçªå·ã«é¢é£ããŠããŸãã以äžã®äŸãåç
§ããŠãã ããã
12:54:30.324 Debug [10] Dispatcher: Using Direct strategy for Test
12:54:30.324 Debug [10] Dispatcher: Using Parallel strategy for Test(1)
12:54:30.324 Debug [10] Dispatcher: Using Parallel strategy for Test(2)
12:54:30.324 Info [ 4] TestWorker: Worker#1 executing Test(1)
12:54:30.324 Info [ 8] TestWorker: Worker#5 executing Test(2)
12:54:30.324 Debug [10] Dispatcher: Using Parallel strategy for Test(3)
12:54:30.324 Debug [10] Dispatcher: Using Parallel strategy for Test(4)
12:54:30.324 Info [ 5] TestWorker: Worker#2 executing Test(3)
12:54:30.324 Info [11] TestWorker: Worker#8 executing Test(4)
ãã®ãã¡ã€ã«ãããé䞊åã§ãããšäºæ³ããããã¹ããä»ã®ãã¹ããšäžŠè¡ããŠå®è¡ãããŠãããã©ããã確èªã§ããã¯ãã§ãã
ããããã æåã¯ãã°ãã¡ã€ã«ã衚瀺ãããŸããã§ããã
ããã¯å¿ååãããã¹ããããã§ãã倱æãããã¹ãã¯ã¹ã¬ãã22ã§å®è¡ãããŠããããã£ã¯ã¹ãã£ãParallelizable(ParallelScope.None)
ããŒã¯ãããŠããŠãããã®ç¹å®ã®ãã£ã¯ã¹ãã£ã®ãã¹ãŠã®ãã¹ãã«ãçŽæ¥æŠç¥ãã䜿çšããŠããããã§ãã
09:44:03.978 Info [22] TestWorker: Worker#NP executing ShouldBeNonParallelTests
09:44:03.978 Info [22] Dispatcher: Saving Queue State for ShouldBeNonParallelTests
09:44:03.978 Debug [22] WorkItemQueue: ParallelQueue.1 pausing
09:44:03.978 Info [22] WorkItemQueue: ParallelQueue.2 starting
09:44:03.978 Debug [22] WorkItemQueue: ParallelSTAQueue.1 pausing
09:44:03.978 Info [22] WorkItemQueue: ParallelSTAQueue.2 starting
09:44:03.977 Info [15] TestWorker: Worker#7 executing SomeOtherTests
09:44:03.978 Debug [22] WorkItemQueue: NonParallelQueue.1 pausing
09:44:03.978 Info [22] WorkItemQueue: NonParallelQueue.2 starting
09:44:03.978 Debug [22] WorkItemQueue: NonParallelSTAQueue.1 pausing
09:44:03.978 Info [22] WorkItemQueue: NonParallelSTAQueue.2 starting
09:44:03.978 Debug [18] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.978 Debug [20] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.978 Debug [17] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.978 Debug [ 9] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.978 Debug [15] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.978 Debug [16] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.978 Debug [14] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.978 Debug [ 9] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.977 Info [19] TestWorker: Worker#11 executing SomeMoreTests
09:44:03.979 Debug [22] Dispatcher: Using Direct strategy for Test_1_from_ShouldBeNonParallelTests
09:44:03.980 Debug [19] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
09:44:03.980 Debug [19] Dispatcher: Using Direct strategy for OtherTestThatCanBeRunInParallel
...
09:44:05.045 Debug [22] Dispatcher: Using NonParallel strategy for ShouldBeNonParallelTests OneTimeTearDown
09:44:05.045 Info [22] TestWorker: Worker#NP executing ShouldBeNonParallelTests OneTimeTearDown
ããã ãã§ã¯äžååãªå Žåã¯ãçã®ãã°ãã¡ã€ã«ãéå ¬éã§ã¡ãŒã«ã§éä¿¡ã§ããŸãã
çŽæ¥æŠç¥ã¯ãå±æ§ã®ãªããã¹ãã«é©ããŠããŸãã ããã¯ãæ°ãããã¥ãŒãšã³ããªãäœæããã«ãåãã¹ã¬ããã§å®è¡ããããšãæå³ããŸãã
ã¹ã¬ãã22ã«æ£åšããä»ã®ãã¹ãã¯ãåããã£ã¯ã¹ãã£ã§ã®äžŠåãã¹ãã§ãããšæããŸãã
ãããããããŸããã
ããããä»ã®ã¹ã¬ããã§ã®ãã¹ãã¯ä»ã®ãã£ã¯ã¹ãã£ããã®ãã®ã§ãã
次ã«ããªãããããå®è¡ãããŠããã®ããç解ããå¿ èŠããããŸãã ãã£ã¯ã¹ãã£ã䞊ååã§ããªãå Žåã¯ãä»ã®ãã£ã¯ã¹ãã£ãåæã«å®è¡ããªãã§ãã ããã
è©Šã...
ParallelScope.Noneã§ã¯ãªãNonParallelizableã䜿çšããŸãã åãã§ããå¿ èŠããããŸããããã°ãçºçããå¯èœæ§ããããŸãã
ãã£ã¯ã¹ãã£ãšãããå«ãã¹ã€ãŒãã®ãã¹ãŠã®äžŠåå±æ§ãã¢ã»ã³ããªãŸã§ãªã¹ãããŸãã
[assembly: Parallelizable(ParallelScope.Fixtures)]
ãããããã€ãã®ãã£ã¯ã¹ãã£ã«ã¯NonParallelizableå±æ§ããããŸããããã ãã§ããããã¯åé¡ãçµã蟌ã¿ãŸãã é䞊åãã£ã¯ã¹ãã£ã¯ãä»ã®1ã€ãŸãã¯è€æ°ã®ãã£ã¯ã¹ãã£ãšäžŠåã«å®è¡ãããŠããŸãã åãäžãã¯äºæ¬¡çãªå¹æã§ãã
çæ³çã«ã¯ã3.7.1ã§å®è¡ãã --trace:Verbose
ããã®åºåã調ã¹ãããšã«ãã£ãŠãäžèšã確èªã§ããã°ããã§ãããã äžç·ã«å®è¡ãããŠããåäžã®é䞊åãã£ã¯ã¹ãã£ããã®ãã¹ãã®ã¿ã衚瀺ãããŸãã
ãã®å Žåã¯ã次ã«ããã£ã¯ã¹ãã£ãNPãã£ã¯ã¹ãã£ãšäžŠè¡ããŠèª€ã£ãŠå®è¡ããããã©ããã«å ±éç¹ããããã©ããããŸãã¯ãã£ã¹ãããã£ã®ããäžè¬çãªåé¡ã§ãããã©ããã調ã¹ãããšãã§ããŸãã
ããã§ãã3.7.1ã§å®è¡ããŠã¿ãŸããããæ¯ååé¡ãªããã¹ããå®è¡ãããŸãã ç§ãèŠãŠããéãã¯ã3.7.1ã¯ã䞊ååã§ããªããã¹ãŠã®ãã¹ãããåžžã«å®è¡ããŠããããã«èŠãã3.8+ãšã¯ç°ãªããæåŸã«1ã€ã®ã¹ã¬ããã§çŽåã«å®è¡ããŠããããã«èŠããããšã§ãã
ãã®ãããªåçŽãªç¶æ³ïŒã»ãšãã©ã®ãã£ã¯ã¹ãã£ã¯ãããã€ãã®é䞊åã§äžŠååå¯èœãªãã¹ãã±ãŒã¹ãšäžŠåã§ã¯ãããŸããïŒã§ã¯ããããçºçããã¯ãã§ãã ãã¹ãŠã®äžŠååå¯èœãªãã£ã¯ã¹ãã£ã¯ã䞊ååäžå¯èœãªãã£ã¯ã¹ãã£ãå®äºããå¿ èŠããããŸãã
@ChrisMaddockããã¯ç§ã«ãšã£ãŠéµã®ããã§ãã ã³ãŒããŒã±ãŒã¹ã«ããã€ãã®ä¿®æ£ãå ããŸããããéåžžã«åçŽãªã±ãŒã¹ãå°ç¡ãã«ããããã§ãã
@DavidZidaråé¡ïŒ2454ãåç §ããŠãã ãããããã¯ãåé¡ã®ããåçŽãªè€è£œã®ããã§ãã
@CharliePooleãšãŠãããã§ãã確ãã«ããã€ãã®SetUpFixturesãããã®ã§ãåãåé¡ã§ããå¯èœæ§ããããŸãã
SetUpFixtureãš[assemblyïŒParallelizableïŒParallelScope.FixturesïŒ]ã䜿çšãããããžã§ã¯ãã§ãåãããšãèµ·ãã£ãŠããŸãã
nunit 3.7.1ã§ã¯ãæ£åžžã«åäœããŸãã 3.8.1ã«ã¢ããããŒãããããšãããšãã³ã³ãœãŒã«ã ãã§ãªãResharperã§ããã¹ãããã³ã°ããŸãã
@Suremakerã¯ãæç¶çãªã³ã³ãœãŒã«ã©ã³ããŒãæ¶ããŠããœã±ããäŸå€ãåŒãèµ·ãããŠãã人ã®1人ã§ãããïŒ ããã«ã¯ãã¹ãªãŒããŒãããã®ãââãªã
@ jnm2ç§ã¯çŸåšæ è¡äžã§ããã2é±éã¯ç¢ºèªã§ããŸããã æ®å¿µãªãããåé¡ã芳å¯ãããšãã«è©³çŽ°ã確èªããŸããã§ãããã12ã16åç®ã®ãã¹ããçµäºããåŸãåžžã«åå®è¡ã§ãã³ã°ããŠããŸããïŒãããã£ãŠãå®è¡ã®éå§æã§ã¯ãªããåžžã«æå®ãããäžå®éã®å®è¡ãã¹ãïŒ..ã
ããŠãå¿é ããªãã§ãã ããã
ãã¥ãŒã埩å ãããšãã¹ãŠã®ãã¥ãŒãéå§ãããããã䞊åãã¹ããšé䞊åãã¹ããåæã«å®è¡ãããŠããããšãããããŸããã ïŒ2476ã§ä¿®æ£ãããŸããã
ãã®ä¿®æ£ãå«ãæ°ããããŒãžã§ã³ã®ãªãªãŒã¹ããã€æåŸ ã§ãããã誰ããç¥ãããšãã§ããŸããïŒ
@rprouseã¯ã¹ã±ãžã¥ãŒã«ã«è©±ããããå¿ èŠããããŸãã ãããããããã«ãããããªãã®ã±ãŒã¹ãå®å šã«ã«ããŒãããŠããããšã確èªããããã«ãããè©ŠããŠã¿ãããšãã§ããã°çŽ æŽãããã§ãããã mygetãã£ãŒãã®ææ°ã®éçºãã«ãã«å€æŽãå¿ èŠã§ãã
ããã«ã¡ã¯ãç§ã¯ãã«ã3.9.0-dev-04639ãè©ŠããŸããããããã§ãããŸãæ©èœããŠããŸãããããã§ãæã 倱æããŸãã ã³ã³ãœãŒã«ã©ã³ããŒãäžåºŠããã¯ãããŸããã
ãã¬ãŒã¹ãã°ã確èªããåŸãåé¡ã®ãã£ã¯ã¹ãã£ãParallelizable(ParallelScope.None)
ããŒã¯ãããŠããŠããããã€ãã®ãã¹ãã䞊è¡ããŠå®è¡ããŠããããã§ãã
é䞊åãã£ã¯ã¹ãã£ãå®äºããçŽåŸã«ã誀ã£ã䞊åå®è¡ãéå§ãããŸããïŒ ããã¯ãé䞊åãã£ã¯ã¹ãã£çšã«æ°ããåé¢ãã¥ãŒãäœæããåŸã§ãã¥ãŒã埩å ãããšãã§ãã
ããã§ã¯ãåãã¹ããã©ã®ããã«ããŒã¯ãããŠãããã«ã€ããŠã®æ³šéä»ãã®ãã°ããã®æç²ã圹ç«ã¡ãŸãã
æ°çŸè¡ã®ã¹ã¿ãŒãã¢ããæ å ±ãååŸããŠããŸãã
16:53:32.469 Debug [22] Dispatcher: Using NonParallel strategy for NonparallelFixture1
...snip...
16:53:32.469 Debug [22] Dispatcher: Using NonParallel strategy for NonparallelFixture2
..ãããŸã§ã®ãšããæ£ããã§ãã
1ã€ã®é䞊åãã¹ããã£ã¯ã¹ãã£ãå®è¡ããããšããå§ãŸããŸããã次ã«äžŠåãã¹ãã®å®è¡ãéå§ããããã«èŠããŸãã
16:53:32.492 Info [22] TestWorker: Worker#STA_NP executing NonparallelFixture1
16:53:32.492 Info [22] Dispatcher: Saving Queue State for NonparallelFixture1
16:53:32.492 Debug [22] WorkItemQueue: NonParallelQueue.1 pausing
16:53:32.492 Info [22] WorkItemQueue: NonParallelQueue.2 starting
16:53:32.492 Debug [22] Dispatcher: Using Direct strategy for NonparallelFixture1_Test1
16:53:32.849 Debug [22] Dispatcher: Using Direct strategy for NonparallelFixture1_Test2
16:53:32.878 Debug [22] Dispatcher: Using Direct strategy for NonparallelFixture1_Test3
16:53:32.879 Debug [22] Dispatcher: Using Direct strategy for NonparallelFixture1_Test4
16:53:32.881 Debug [22] Dispatcher: Using NonParallel strategy for NonparallelFixture1 OneTimeTearDown
16:53:32.881 Info [22] TestWorker: Worker#STA_NP executing NonparallelFixture1 OneTimeTearDown
16:53:32.883 Info [22] WorkShift: NonParallel shift ending
16:53:32.883 Debug [22] WorkItemQueue: NonParallelQueue.2 pausing
16:53:32.885 Info [22] Dispatcher: Restoring Queue State
16:53:32.885 Debug [22] WorkItemQueue: ParallelQueue.2 pausing
16:53:32.886 Info [22] WorkItemQueue: ParallelQueue.1 starting
16:53:32.886 Debug [22] WorkItemQueue: ParallelSTAQueue.2 pausing
16:53:32.886 Info [22] WorkItemQueue: ParallelSTAQueue.1 starting
16:53:32.886 Info [15] TestWorker: Worker#7 executing ParallelFixture1
16:53:32.886 Info [11] TestWorker: Worker#3 executing ParallelFixture2
ãã®åŸããã®ããã«ãªããŸãã
16:53:32.886 Info [22] TestWorker: Worker#STA_NP executing NonparallelFixture2
16:53:32.886 Info [22] Dispatcher: Saving Queue State for NonparallelFixture2
16:53:32.886 Debug [22] WorkItemQueue: ParallelQueue.1 pausing
16:53:32.886 Info [22] WorkItemQueue: ParallelQueue.2 starting
16:53:32.886 Debug [22] WorkItemQueue: ParallelSTAQueue.1 pausing
16:53:32.886 Info [22] WorkItemQueue: ParallelSTAQueue.2 starting
16:53:32.886 Debug [22] WorkItemQueue: NonParallelQueue.1 pausing
16:53:32.886 Info [22] WorkItemQueue: NonParallelQueue.2 starting
16:53:32.886 Debug [22] WorkItemQueue: NonParallelSTAQueue.1 pausing
16:53:32.886 Info [22] WorkItemQueue: NonParallelSTAQueue.2 starting
16:53:32.886 Debug [20] Dispatcher: Using Direct strategy for OtherParallelTest1
16:53:32.886 Debug [18] Dispatcher: Using Direct strategy for OtherParallelTest2
16:53:32.886 Debug [10] Dispatcher: Using Direct strategy for OtherParallelTest3
...snip...
16:53:32.923 Debug [16] Dispatcher: Using Parallel strategy for ParallelFixture3 OneTimeTearDown
16:53:32.923 Info [16] TestWorker: Worker#8 executing ParallelFixture3 OneTimeTearDown
16:53:32.926 Debug [18] Dispatcher: Using Parallel strategy for ParallelFixture4 OneTimeTearDown
16:53:32.926 Info [16] TestWorker: Worker#8 executing ParallelFixture4 OneTimeTearDown
16:53:32.926 Debug [16] Dispatcher: Using Direct strategy for OtherParallelTest3 OneTimeTearDown
16:53:32.993 Debug [22] Dispatcher: Using Direct strategy for NonparallelFixture2_Test1
16:53:33.018 Debug [15] Dispatcher: Using Direct strategy for OtherParallelTest18
16:53:33.019 Debug [15] Dispatcher: Using Direct strategy for OtherParallelTest19
...snip...
16:53:33.051 Debug [12] Dispatcher: Using Direct strategy for OtherParallelTest35
16:53:33.053 Debug [12] Dispatcher: Using Parallel strategy for ParallelFixture5 OneTimeTearDown
16:53:33.053 Info [16] TestWorker: Worker#8 executing ParallelFixture5 OneTimeTearDown
16:53:33.056 Debug [15] Dispatcher: Using Parallel strategy for ParallelFixture6 OneTimeTearDown
16:53:33.056 Info [16] TestWorker: Worker#8 executing ParallelFixture6 OneTimeTearDown
16:53:33.242 Debug [22] Dispatcher: Using Direct strategy for NonparallelFixture2_Test2
16:53:33.295 Debug [22] Dispatcher: Using Direct strategy for NonparallelFixture2_Test3
.. çã ã