ã¿ããªã®ã¡ã³ã¿ã«ã¢ãã«ã¯ããã£ã¯ã¹ãã£å ã§äžŠååãããšãã«ãã¹ãã±ãŒã¹ããšã«äœæãããã€ã³ã¹ã¿ã³ã¹ãããããã§ãïŒhttps://github.com/nunit/nunit/issues/2105ãhttps://github.com/nunit/nunit/issues / 2252ãhttpsïŒ//github.com/nunit/nunit/issues/2573ïŒããã¯æ±ºããŠããã§ã¯ãããŸããã§ãããã ç§ã¯åžžã«éçã¯ã©ã¹ã䜿çšããããã€ãã®æ¹æ³ã§ããè±ããªãšã¯ã¹ããªãšã³ã¹ãæäŸãã䜿ãæšãŠã®ãã¹ãããããã£ã¯ã¹ãã£ã¯ã©ã¹ãå®çŸ©ããããšã§ãã®åé¡ã解決ããåŸåããããŸãïŒäŸïŒããããã¯ç§ãã¡ããã¹ãŠã®äººã«æãã§ããããšã§ã¯ãªããããããŸããã ããã§ã®ããããªæ¬ ç¹ã¯ãéçã¯ã©ã¹ãNUnitããã£ã¯ã¹ãã£ãšèŠãªããã®ã§ããã®ã«å¯Ÿããå®éã®ãã£ã¯ã¹ãã£ã¯ãã¹ããããã¯ã©ã¹ã§ãããšããçšèªã§ãã
ã€ã³ã¹ã¿ã³ã¹ããšã®ãã¹ãã±ãŒã¹ãããã©ã«ãã«ãããªãã·ã§ã³ã¯ãããŸãããããã¯ããããã¹ããå¥ã®ãã¹ãããç¶æ
ã«ã¢ã¯ã»ã¹ã§ããããšã«äŸåããé䞊åãã£ã¯ã¹ãã£ãå£ãããã§ãã [Order]
å±æ§ã䜿çšããŠãã人ã ãã圱é¿ãåããå¯èœæ§ããããŸãããç§ãèããããšãã§ããé åºäŸåã®ãã¹ããå®å
šã«ç Žãããšã«ãªããŸãã
ç§ã¯ãã£ãŒãªãŒã®ææ¡ã奜ãã§ãïŒ
- ãã¹ããã£ã¯ã¹ãã£ã®äœææ¹æ³ãåäžã€ã³ã¹ã¿ã³ã¹ãŸãã¯ãã£ã¯ã¹ãã£ããšã®ã€ã³ã¹ã¿ã³ã¹ã«èšå®ã§ããã¢ã»ã³ããªã¬ãã«ã®å±æ§ã
- ã·ã³ã°ã«ã€ã³ã¹ã¿ã³ã¹ã¯ä»ãšåãããã«æ©èœããŸã
- ãã£ã¯ã¹ãã£ããšã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã¹ãããšã«æ°ãããã£ã¯ã¹ãã£ãäœæããŸã
- ãã¹ãããšã«1åã®ã»ããã¢ããããã³ãã£ã¢ããŠã³ã¢ã¯ãã£ããã£ãå®è¡ããïŒã€ãŸããã1åãã§ã¯ãªããªãïŒããOneTimeSetUpããã³OneTimeTearDownã«ãšã©ãŒã®ãã©ã°ãä»ããŸãã
å¯èœãªæ¡åŒµïŒ
- ãã®ã¯ã©ã¹ã¬ãã«ãäœæããŠãåã ã®åšå ·ã«ç°ãªãã©ã€ããµã€ã¯ã«ãæãããããšãã§ããŸãã
- 䞊è¡ããŠå®è¡ããã1ã€ä»¥äžã®ãã¹ããå«ããã£ã¯ã¹ãã£ã«å¯ŸããŠåå¥ã®ã€ã³ã¹ã¿ã³ã¹ãèªåçã«å®è¡ãã3çªç®ã®ã¢ã»ã³ããªã¬ãã«èšå®ããããŸãã ïŒåžžã«äºåã«ç¥ãã®ã¯é£ããïŒ
ãã ããæåã«åºæ¬ãè¡ããšæããŸãã
çŸåšãå€æŽå¯èœãªã€ã³ã¹ã¿ã³ã¹ç¶æ
ãããããã£ã¯ã¹ãã£ãããèªäœãšäžŠè¡ããŠå®è¡ãããŠããå Žåã¯ãã°ã§ããããšãä¿èšŒãããŠããããããã£ã¯ã¹ãã£ã®ãã¹ãã±ãŒã¹ãå®è¡ããããã«æ§æãããŠããå Žåã¯ããã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹ã«åãæ¿ããèªåãªãã·ã§ã³ã䜿çšã§ããŸãã䞊è¡ããŠãé倧ãªå€æŽã[assembly: InstancePerTestCase]
ãè¿œå ããªãããã«ãæãè³¢æãªããã©ã«ãã§ããå¯èœæ§ããããŸãã
ç§ã¯ã¬ãŒãã¬ãŒã«ã«è³æã§ãã ãã£ã¯ã¹ãã£ããã¹ãã±ãŒã¹ããšã«ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããå ŽåãOneTimeSetUpããã³OneTimeTearDownã«ãšã©ãŒã®ãã©ã°ãç«ãŠãå¿ èŠããããŸãã ããããããããéçã§ãªãéãïŒ
çŸåšãïŒ1ïŒã³ã³ã¹ãã©ã¯ã¿ãŒãŸãã¯1åéãã®ã»ããã¢ããã§ç¶æ ãèšå®ããïŒ2ïŒã©ã®ãã¹ãã§ãç¶æ ãå€æŽããªããšããæ¡ä»¶ã§ã䞊åãã¹ãéã§ç¶æ ã__can__å ±æã§ããŸãã ãã¹ããŸãã¯ã»ããã¢ããã§ç¶æ ãå®æ°ã«èšå®ãããŠããå Žåã¯ãä»ã®å€ã«èšå®ããªãéããããŸãããå ŽåããããŸãã åŸè ã¯ããããè¡ãNUnitãã¹ããããã€ããããšæããŸãããåä»ã§ãã
ç§ã®èãã§ã¯ãããã©ã«ããããã«å€æŽããããšã¯ã§ããŸããã å¯å€ç¶æ ã§ããããšã¯ãçŸæç¹ã§ã¯ãã°ãä¿èšŒãããã®ã§ã¯ãããŸããã å®éã«å€æŽããå Žåã®ãã°ã§ãããã³ãŒãåæãè¡ããªãéããããã¯ããããŸããã
ãã¹ããã»ããã¢ããããŸãã¯ãã£ã¢ããŠã³å ã§ã€ã³ã¹ã¿ã³ã¹ã®ç¶æ ãå€æŽããªãå Žåãç Žæããããšã¯ãããŸããã ããããå Žåããã¹ããããèªäœãšäžŠè¡ããŠå®è¡ã§ããéããããªãã¯ãã§ã«å£ããŠããŸãã ç§ãèããããšãã§ããããã«ããªããå£ããŠããªãæ¹æ³ã¯ãããŸããã çµæãšããŠçãããŠãŒã¶ãŒã®è€éãããè³¢æãªããã©ã«ããã®çµæã«å€ãããšèããå Žåãããã¯èªåãªãã·ã§ã³ã®æ£åœåã§ãã
ããªãã«ã¯ãã€ã³ãããããŸãããããã¯æœåšçãªæ¡åŒµã§ãããçŸæç¹ã§æ±ºå®ããå¿ èŠã¯ãããŸããã ä»ãããã¹ãŠã®æ±ºå®ãäžãããšããã®ã§ã¯ãªãããããç¹°ãè¿ãå®è¡ããŸãããã
ç§ã¯@CharliePooleã䜿çšããŠã
ãã¹ãŠã®ã¹ã¬ããã§å ±æãããã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªããã¹ã¬ããããšã«ã€ã³ã¹ã¿ã³ã¹ãããªã¬ãŒãããã£ã¯ã¹ãã£ã¬ãã«ã®å±æ§ãããããŸããã
@BlythMeisterå¿é ããªãã§ãã ããïŒ æ¢åã®ã³ãŒããå£ãå§ããåå ãšãªãå€æŽã¯èæ ®ããŠããŸããã
ããã¯é¢çœãã ã€ã³ã¹ã¿ã³ã¹ããšã®ãã¹ãã±ãŒã¹ã¯ãã€ã³ã¹ã¿ã³ã¹ããšã®ã¹ã¬ãããããç°¡åã«é ãæ©ãŸããããšãã§ãããšæããŸãã ãã¹ããã¹ã¬ããã«å²ãåœãŠãããæ¹æ³ã¯ä¿¡é Œã§ããªãããããã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹ãããã¡ãªããããããšã¯èããããŸããã
ãããç§ã¯ã¹ã¬ãããšããçšèªã䞊åå®è¡ãæå³ããããã«äœ¿çšããŠããŸã....ããã¯å®éã«ã¯äžæ£ç¢ºã§ãã
è¬çœªããããŸãã
XPã®çšèªã§ã¯ïŒãããŠããããåžžã«ç§ã®èŠç¹ã§ããããšã誰ããç¥ã£ãŠããããšãé¡ã£ãŠããŸãïŒã3ã€ã®ã¹ããŒãªãŒããããŸãã
ãŠãŒã¶ãŒã¯ãã¢ã»ã³ããªå ã®ãã¹ãŠã®ãã£ã¯ã¹ãã£ã«å¯ŸããŠããã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹ã®åäœãã°ããŒãã«ã«æå®ã§ããŸãã
ãŠãŒã¶ãŒã¯ããã£ã¯ã¹ãã£ã§ãã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹ã®åäœãæå®ã§ããŸãã
ãŠãŒã¶ãŒã¯ã䞊è¡ããŠå®è¡ãããå¯èœæ§ã®ãããã¹ããå«ããã£ã¯ã¹ãã£ã«å¯ŸããŠããã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹ã®åäœãæå®ã§ããŸãã
ãã®å·ã§ïŒ1ïŒãå®å šã«å®è£ ãããããšãæãã§ããŸãã ä»ã®ãšãããïŒ2ïŒãé ããå€ãããå°ãªããšãã³ãŒããæžãéšåããå€ãå¿ èŠããããšæããŸãã ïŒ3ïŒã¯å¯èœæ§ããããšæããŸãããä»ã®åé¡ã§ãã§ã«ééããããã€ãã®èœãšãç©ŽããããŸãã ïŒãã£ã¯ã¹ãã£ã¯ããã¹ãã±ãŒã¹ã䞊è¡ããŠå®è¡ãããã©ãããç¥ããŸããïŒïŒïŒ1ïŒãšïŒ2ïŒãå®äºããŠããŒãžãããåŸã®1ã€ã®JustInTimeã«ã€ããŠè©±ããŸãããã FWIWãç§ãã¡ã¯ããã€ãã®åããå ã«èããããšããããšã«ãã£ãŠçµã³ç®ã§çžãããåŸåããããšæããŸãã ïŒ2ïŒãšïŒ3ïŒã«ã€ããŠã¯ããããã¯ããªãããã«èª¬æããŸããããããã¯ç°¡åã«åé¿ã§ããããã§ãã
ãã®æãç§ãã¡ã¯çåæããŠãããšæããŸãã ãã ãããã®åã«NUnitã®åªå é äœãããã€ãããã®ã§ãä»ã®äººãã³ã¡ã³ãããããå Žåã«ãã£ãŠã¯åãäžãããã§ããããã«ããŠãããŸãã
ã³ãã³ãã©ã€ã³èšå®ã§ã¯ãªãå±æ§ã䜿çšããŠãããè¡ãããšã®å©ç¹ã¯ãã©ã®ã©ã³ããŒã§ãæ©èœããããšã§ãã
@CharliePooleãå±æ§ã§ããã¹ãã ãšããããšã«åæããŸãã ãã¹ãã¯ããã¹ãããšã®ã€ã³ã¹ã¿ã³ã¹ãŸãã¯ãã£ã¯ã¹ãã£ããšã®ã€ã³ã¹ã¿ã³ã¹ã念é ã«çœ®ããŠèšèšããå¿ èŠããããããåžžã«ãã®ããã«å®è¡ããå¿ èŠããããŸãã ãŸãããªãã·ã§ã³1ã®ã¿ãå®è¡ããããšã奜ã¿ãŸãããã®ã¹ã¿ã€ã«ã®ãã¹ããå¿ èŠãªå Žåã¯ããã¹ãã¹ã€ãŒãå šäœã§ãªããã€ã³ããå¿ èŠããããšæããŸãã ããäœãã¬ãã«ã§ãªããã€ã³ã§ããããã«ãããšãè€éããå¢ããROIãè¯ããªããšæããŸãã
ãã®æ©èœãå®è£ ããå·®ãè¿«ã£ãèšç»ããããã©ããã ãç¥ãããã§ããïŒ
@rprouseããã¯ãŸã èšèšãå¿ èŠã§ãããšããŒã¯ãããŠããŸãããè°è«ã¯ãã§ã«ãã¹ãŠãã«ããŒããŠããããã«èŠããŸãã
@CharliePooleã¯ããããèšèšãã移è¡ããå¯èœæ§ãããããšã«åæããŸããã @pfluegsèšèšä»¥å€ã®äœæ¥ã¯éå§ããŠããªãããããŸã èšç»ã¯ãããŸããã
誰ããããã«ããã»ã©æ³šæãæã£ãŠããã®ãã©ããã¯ããããŸããããè°è«ããã¶ã€ã³ã©ãã«ããªããšããããšã¯ã誰ããå¿é¡ã§ããããšãæå³ããŸãã ð
ç§ã¯ã¡ããã©ãã®åé¡ã«ã²ã©ãåãŸããŸãã-ä¿®æ£ã®ããã«+1ã
ããå€ãã®ãªãã·ã§ã³ãå¿ èŠãªå Žåã¯ã次ã®ããã«ããŸãã
`` `cïŒ
[ã¢ã»ã³ããªïŒFixtureCreationïŒFixtureCreationOptions.PerTestCaseïŒ]
And:
```diff
namespace NUnit.Framework
{
+ public enum FixtureCreationOptions
+ {
+ Singleton, // = default
+ PerTestCase
+ }
}
å°ãªããšãæ°ãããã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããã¹ãã§ã¯ãããã«é¢ããç§èªèº«ã®èãæ¹ã¯å°ãå€ãããŸããã
ç§ã¯ä»ã2ã€ã®ã¯ã©ã¹ã¬ãã«ã®å±æ§ãå¿ èŠã ãšæããŸãã1ã€ã¯åäœããšã«1ã€ã§ãã TestFixtureããã¹ãããšã®ã€ã³ã¹ã¿ã³ã¹ã§åäœãããSharedFixtureãNUnitã®ããã«åäœãããŸãã æããã«ãããã¯NUnitã®ã³ã³ããã¹ãã«ãããé倧ãªå€æŽã§ãããäžè¬çãªã¢ãããŒãã¯æ€èšãã䟡å€ããããããããŸããã
@CharliePoole [TestFixture(FixtureOptions.PerTestCase)]
ã¯è¯ãæ§æã®ããã«èŠããŸããããã¹ãŠã®ãã¹ããããžã§ã¯ãã§ãªããã€ã³ã§ããããã«ãã¢ã»ã³ããªã¬ãã«ã®å±æ§ãå¿
èŠã§ãã ã¢ã»ã³ããªã¬ãã«ã®å±æ§ãã©ã®ããã«èŠãããã§ããïŒ
ããã§ãããããç§ãæ°ãããã¬ãŒã ã¯ãŒã¯ã§äœãããããäºçŽWRTã«è¡šçŸããçç±ã§ãã ãã ããNUnitã®å Žåã TestFixture
ã®ã»ãã³ãã£ã¯ã¹ãå€æŽããããªãã®ã§ãã€ã³ã¹ã¿ã³ã¹ããšã®åäœã«æ¬åœã«é©ããååãèããããšã¯ã§ããŸããã ååã2ã€ããå Žåããã¹ãŠã®ãã£ã¯ã¹ãã£ã§ç®çã®åäœãå®çŸããããã«å¿
èŠãªã®ã¯ããœãŒã¹ãã¡ã€ã«ã®ã°ããŒãã«ç·šéãè¡ãããšã ãã§ãã
ã¢ã»ã³ããªã¬ãã«ã§ã®ã°ããŒãã«èšå®ã¯ãAssemblyInfoãã¡ã€ã«ã«äœãèšå®ãããŠããããèªèããŠããªãéçºè ãæ··ä¹±ããããããå«ãã§ãã çŸåšãããã€ãèš±å¯ããŠããã®ã§ãããã«è¿œå ããŠã倧ããªå®³ã¯ãªããšæããŸãã ã¢ã»ã³ããªå ã®ãã¹ãŠã®ãã£ã¯ã¹ãã£ã«ãªãã·ã§ã³ïŒããã©ã«ãïŒïŒãèšå®ããŠããããšãéç¥ããå¿ èŠãããããšãé€ããŠãã¢ã»ã³ããªã¬ãã«å±æ§ã®ååã«ã€ããŠã¯èããŠããŸããã
ãã£ãããçç±ãããã¢ã»ã³ããªã¬ãã«ã®ããã©ã«ããããçšåºŠå«ãã§ãã çŸåšå±æ§ã®ãªããã£ã¯ã¹ãã£ã¯ã©ã¹ã®ããããã«æ°ããå±æ§ãè¿œå ããã®ãšæ¯èŒããŠãã¢ã»ã³ããªã¬ãã«ã®å±æ§ã¯ç§ã奜ãã«ãŒãã§ãã
@ nunit / framework-teamã©ãæããŸããïŒ æ©èœã®æåã®å°å ¥ã«ã€ããŠïŒ
å±æ§ã®ãªããã£ã¯ã¹ãã£ã¯ã©ã¹ã®è¯ãç¹ã
ã¯ããã¯ããããããããã
ç§ã¯ãã£ãŒãªãŒã«åæããŸã-ããã£ã¯ã¹ãã£ã¬ãã«ãã¯ãã¯ã©ã¹ã¬ãã«ããæå³ãããšããæ確åã§ã ïŒããšãã°ããã¹ãã±ãŒã¹ãœãŒã¹ã¡ãœãããšã¯å¯Ÿç §çã§ããðïŒ
ããã¯åœ¹ã«ç«ã¡ãŸãïŒ ãããã£ãŠã [TestFixture(FixtureCreationOptions.PerTestCase)]
ã®åé¡ã¯ãåãã¯ã©ã¹ã§è€æ°ã®TestFixtureå±æ§ãèš±å¯ãããããããäºãã«ççŸããå¯èœæ§ãããããšã§ãã ã¢ã»ã³ããªãšã¯ã©ã¹ã«é©çšå¯èœãªæ°ããååä»ãå±æ§ã䜿çšããæ¹ããããç°¡åã§ããããã
`` `cïŒ
[ã¢ã»ã³ããªïŒShareFixtureInstancesïŒfalseïŒ]
[ShareFixtureInstancesïŒfalseïŒ]
ãããªãã¯ã¯ã©ã¹SomeFixture
{{
//..ã
}
Framework API:
```diff
namespace NUnit.Framework
{
+ [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class)]
+ public sealed class ShareFixtureInstancesAttribute : PropertyAttribute
+ {
+ public bool ShareFixtureInstances { get; }
+ public ShareFixtureInstancesAttribute(bool shareFixtureInstances);
+ }
}
ããã§ããã ããã®ç¶æ¿åäœã¯äœã§ããïŒç¬èªã®ãã¹ãã䜿çšããŠåºæ¬ã¯ã©ã¹ã«å±æ§ãããããã®ã¯ã©ã¹ãããç¶æ¿ããå Žåã¯ã©ããªããŸããïŒ ð
ãããããããã¯ãã¯ã©ã¹ãå±æ§ã§ãããããåé¡ã®ãã¹ããå®è¡ãããŠããå®éã®ã¯ã©ã¹ã«ããå¿ èŠããããŸããïŒ
ãŸããç§ã¯ååã«å®å šã«ç±å¿ã§ã¯ãããŸãã-ãã£ã¯ã¹ãã£ã¯å¿ ãããnunitçšèªã®ã¯ã©ã¹ã§ã¯ãªãã®ã§ãç§ã¯æããŸããïŒããšãã°ããsuiteããšãfixtureãããã匷ãã»ãã³ãã£ã¯ã¹ãæã£ãŠããªãéãããã¹ãã±ãŒã¹ãœãŒã¹ã®ãã¹ãŠã®ãã¹ã- Nunitã®çšèªã§ã¯ãç§ãæã£ãŠãããããæå³ããããŸãïŒïŒ
InstancePerTestã«æ²¿ã£ããã®ã¯ã©ãã§ãã...ããããããé©åãªååãä»ããããŠããŸã...
ã¢ã»ã³ããªã¬ãã«ãšã¯ã©ã¹ã¬ãã«ã«ã€ããŠã¯åæããŸãããããã以äžã¯ãããŸããã ãŸãã @ ChrisMaddockã®ææ¡ClassInstancePerTest(bool)
沿ã£ããã®ã奜ãã§ãã ãŸããã¯ã©ã¹ã¬ãã«ã®å±æ§ãã¢ã»ã³ããªã¬ãã«ããªãŒããŒã©ã€ãããç¶æ¿ãããããšãæåŸ
ããŠããŸãã éåžžã䞊ååŠçãšçµã¿åãããã¯ã©ã¹ã®ã¡ã³ããŒã«åºã¥ããŠãã¹ãããšã«ã€ã³ã¹ã¿ã³ã¹ãå¿
èŠã«ãªããããç¶æ¿ã¯éèŠã ãšæããŸãã ãããã£ãŠãããã掟çã¯ã©ã¹ã«èªåçã«é©çšããå¿
èŠããããŸãã
ç§ã¯ãã€ãŠããã¹ããã£ã¯ã¹ãã£ã¿ã€ããæ§ç¯å¯èœã§ããå ŽåãNUnitããã¹ãããšã«ã€ã³ã¹ã¿ã³ã¹ãäœæããªãããšã«æ¬åœã«é©ããŠãŠããããã¹ãïŒè¶³å Žãèšå®ãããã¹ããå®è¡ãããšãè¶³å ŽããªããªããŸãã ãã¹ãéã§ã®äžæ³šæã«ããç¶æ ã®ç§»è¡ã¯ãããŸããã
ãããåŠãã ã @ jnm2ã®ããã«ããã¹ããæåã§ã€ã³ã¹ã¿ã³ã¹åããŸãã ãã ãããã¡ã€ã«ã®äœæãåé€ãªã©ã®ãã¹ããè¡ããšãã±ãŒã¹ã©ã³ããŒã¯æ¬åœã«é¢åã«ãªããŸããIDisposableã§ããå¿
èŠããããŸãã ããéæ³ã®[TearDown]
ã¯ãããŸããã :(ãã¹ããšã©ãŒãšã¹ãã£ãã©ãŒã«ãã£ã³ã°ãšã©ãŒãåºå¥ããäžè²«ããæ¹æ³ããããŸãããããã¯éåžžã«èŠçãªãŠãŒã¹ã±ãŒã¹ã§ãã
ç§ããã¶ã€ã³ã«å²ã蟌ããããããªããªããç§ã¯ã¯ããã¯ãããããããããã§äžç·ã§ãã
PerTestInstance
ã InstancePerTest
ãªã©ã®ååPerTestInstance
ã ShareFixtureInstances
ãããã¯ããã«åªããŠããŸãã FïŒã³ãŒãããã¹ãããŠãããšããåã€ã³ã¹ã¿ã³ã¹ãã¯ã©ã¹ã§ãããšã¯æããªãã®ã§ãå±æ§ã®ååã«ããClass
ãšããåèªã¯å°ãå«ãã§ãã ããããç§ããããšäžç·ã«æ®ãããããšã¯ç¢ºãã§ãïŒ :)
ããããã®æ©èœãåŸ ã¡ãããŸããïŒ
@ kkm000 ãã¯ã©ã¹ãã®äœ¿çšã«ã€ããŠåæããŸãã NUnitã¯éåžžãå®è£ ãšã¯ç°ãªãååã䜿çšããŠããŸãã ããã§ãã人ã ã¯æã蟌ã¿ãããŸããããã®ãããªããšãé¿ããããã«äžè²«ããŠããæ¹ãè¯ãã§ãã
ç§ã話ããŠããããšã®äŸïŒTestãTestFixtureãSetUpFixtureãWorkerïŒã¹ã¬ããã§ã¯ãªãïŒãªã©ãååãšããŠãã¯ã©ã¹__could__ã¯ããã£ã¯ã¹ãã£ã§ã¯ãªãåäžã®ãã¹ããè¡šããŸãããã¹ãã§ããã__ç§ãã¡ã¯__ã§ããŸããã
@ kkm000
ã³ã¡ã³ãããããšãããããŸãïŒ ããªãã¯ãŸã£ããä»å
¥ããŠããŸããã ç§ãã¡ã¯ãå¯èœãªéãèšèªã«ãšããããªããšããèšèšç®æšãæã£ãŠããŸãã
CïŒã«çŠç¹ãåœãŠã以å€ã«ã class
ãšããåèªã«ã€ããŠãã1ã€ãã¯ã©ã¹ã§ã¯ãªããã£ã¯ã¹ãã£ããµããŒãããå Žåã¯ã©ããªãã§ããããã
[InstancePerTestCase]
ã¯åé¡ãåé¿ããŸãããçŽæçãªæçãã倱ãããå¯èœæ§ããããŸãã
ä»æ¥ããã£ã¯ã¹ãã£ãšã¯ã©ã¹ã¯ããŸãçºæ£ããŠããŸããããçºæ£ããå Žåããã®å±æ§ã¯ã¯ã©ã¹ã§ã¯ãªããã£ã¯ã¹ãã£ã«é¢ä¿ããŠãããšç¢ºä¿¡ããŠããŸãã
ã¹ã€ãŒãã¯äžè¬çãªçµç¹ã®æŠå¿µã§ããããã£ã¯ã¹ãã£ã¯ã»ããã¢ãã/ãã£ã¢ããŠã³ããžãã¯ãšãã¹ãç¶æ
ãä¿æãããã¹ãã¡ãœããã«æž¡ãããŸãïŒçŸåšã¯ã€ã³ã¹ã¿ã³ã¹ã¡ãœããã®this
åŒæ°ãšããŠïŒã ååã¯ãçµç¹éå±€ã®äžéšã§ããå¿
èŠã¯ãããŸããã ã¯ã©ã¹ã®æŠå¿µããåå²ãããã¹ãã¹ã€ãŒãã®æŠå¿µããåå²ãããã£ã¯ã¹ãã£ãæ³åããŠã¿ãŸãããã
`` `cïŒ
public static class SomeTestSuite //ãã£ã¯ã¹ãã£ã§ã¯ãããŸããïŒã»ããã¢ãã/ãã£ã¢ããŠã³ããžãã¯ããã¹ãç¶æ
ããããŸãã
{{
[ãã¹ã] //åäžã®ãã¹ãã§ããããã©ã¡ãŒã¿ãŒåãããã¹ã€ãŒãã§ã¯ãããŸããã
//ãã£ã¯ã¹ãã£ã¯ãæé»ã®thisãã©ã¡ãŒã¿ã§ã¯ãªããã©ã¡ãŒã¿ãä»ããŠæ³šå
¥ãããŸã
public static void SomeTestïŒSomeFixtureãã£ã¯ã¹ãã£ïŒ
{{
ãã£ã¯ã¹ãã£.SomeService.SomeProperty = true;
ãã£ã¯ã¹ãã£.SomeActionïŒïŒ;
ãã£ã¯ã¹ãã£.AssertSomethingïŒïŒ;
}
}
[ãã¹ããã£ã¯ã¹ãã£]
public struct SomeFixtureïŒIDisposable
{{
public SomeService SomeService {get; } // å·
public SomeFixture() // This was almost legal syntax in C# 6, but I'm making a point ð
{
// Setup
}
public void Dispose()
{
// Teardown
}
public void SomeAction()
{
// Helper method
}
public void AssertSomething()
{
// Helper method
}
}
`` `
äžèšã®äŸã§ã¯ã [FixtureInstancePerTestCase]
ãŸãã¯[SharedFixtureInstances(false)]
ã¯ã¯ã©ã¹ã«çŠç¹ãåœãŠãŠããããéå±€ïŒã¹ã€ãŒãïŒã«ãçŠç¹ãåœãŠãŠããŸããããã£ã¯ã¹ãã£ã«çŠç¹ãåœãŠãŠããããã£ã¯ã¹ãã£ã¯åå©çšå¯èœãªã»ããã¢ãã/ãã£ã¢ããŠã³ããžãã¯ããã³ç¶æ
ã§ãã å
·äœçã«ã¯ããã¹ãã±ãŒã¹ããšã«æ°ããSomeFixture
ãäœæããããã©ããããŸãã¯åããã®ãåãã¹ãã«æž¡ããããã©ããã«çŠç¹ãåœãŠãŠããŸãã
ãã®å±æ§ã¯ãç°ãªãITestãITest.Fixtureã€ã³ã¹ã¿ã³ã¹ãå
±æãããã©ãããå¶åŸ¡ããå¶åŸ¡ãããã®ã¯[TestFixture]
ïŒååã«Fixture
ããå¥ã®å±æ§ïŒã§è£
食ãããã®ã§ããããããã£ã¯ã¹ãã£ãšããåèªã䜿çšããããã®_consistent_ãªãã·ã§ã³ã
ïŒç§ã¯è°è«ããã®ã«éèŠãšæãããç¹ãæã£ãŠããŠããŸãããç§ã¯ãã®ååãã©ããªããã«ã€ããŠã¯ããŸãæè³ããŠããŸãããïŒ
@ jnm2ã¹ã€ãŒããšãã£ã¯ã¹ãã£ã®æŠå¿µãåé¢å¯èœã§ããããšã¯
ç§ã®ç¥ãéããxunit.netã¯ããã£ã¯ã¹ãã£ããã¹ãç¶æ¿éå±€ãšã¯å¥ã®ãšã³ãã£ãã£ã«ããæåã®ïŒå¯äžã®ïŒïŒãã¬ãŒã ã¯ãŒã¯ã§ããã
ãã©ã¡ãŒã¿åããããã¹ããäœæãããšããå¥ã®ããã£ã¯ã¹ãã£ããšããŠTestCaseSourceãå°å ¥ã§ããã¯ãã§ãã ç§ã¯ãããããŸããã§ããããããŠç§ã¯ãããããçŽãããã«å¿ èŠãªå€æŽãä»å£ããŠãããšæããŸãã
人ã ãæã ïŒäžŠååŠçã®åã«ïŒã€ã³ã¹ã¿ã³ã¹ããšã®åäœã«ã€ããŠå°ããçç±ã¯ããããä»ã®ãã¬ãŒã ã¯ãŒã¯ãè¡ãããšã ããã ãšæããŸãã åæ§ã®çç±ã§ã圌ãã¯åé¢å¯èœãªååã__ããŸããã§ãã__ã
èŠçŽãããšããããç§ãæãããšã§ã...
ãã¹ãã±ãŒã¹ããšã®åäœã«ã€ã³ã¹ã¿ã³ã¹ãå¿ èŠã§ãã
äžäœäºææ§ããããããããã©ã«ãã«ããããšã¯ã§ããŸããã
åé¢å¯èœãªãã£ã¯ã¹ãã£ã¯ã¯ãŒã«ãªã¢ã€ãã¢ã§ãããå¥ã®åé¡ã§ããããŸãã
åé¢å¯èœãªãã£ã¯ã¹ãã£ã¯ãã€ã³ã¹ã¿ã³ã¹ããšã®ãã£ã¯ã¹ãã£ãšå°ãªããšãåããããè€éã«å®è£ ã§ããŸãã ãã¡ããããã®å Žåã¯äžäœäºææ§ã«å¯ŸåŠããå¿ èŠããªããããç°¡åã«ãªããŸãã
ãã€ã³ã3ãš4ã«ã€ããŠç¢ºèªããããã«ãã³ãŒããµã³ãã«ãæ°æ©èœã®ææ¡ãšããŠã§ã¯ãªãããã®å±æ§ã®æ£ããååã«ãã©ãçãã®ã«åœ¹ç«ã€æèå®éšãšããŠæå³ããŸããã æèå®éšã¯ãç§ãã¡ããã£ã¯ã¹ãã£ã®ã¢ã€ãã¢ã«æ¬åœã«çŠç¹ãåãããŠããããšãç§ã«æããŠãããŸãããããã¯ããŸããŸäžèŽããŠããã«ãããããããã¯ã©ã¹ãã¹ã€ãŒãã§ã¯ãããŸããã
ã©ã®ãããªåœ¢åŒã§ãã£ãŠãããã£ã¯ã¹ãã£ã¯ã»ããã¢ãã/ãã£ã¢ããŠã³/ç¶æ
ã®åå©çšå¯èœãªå®çŸ©ã§ãã ããããã®èšèã®æå³ã ãšæããŸãã ãã£ã¯ã¹ãã£ã€ã³ã¹ã¿ã³ã¹ïŒã»ããã¢ãã/ãã£ã¢ããŠã³/ç¶æ
ã®çºçïŒã¯ãæ°ããå±æ§ããã¹ãã±ãŒã¹éã§å
±æãããã©ããã決å®ãããã®ã§ãã ååã®ã©ããã«FixtureInstances
ããããšãæ倧ã®æçãããããããããšæããŸãã
ããã¯èª°ã«ãšã£ãŠãæ£ããããã«æãããŸããïŒ ããã§ãªãå Žåãä»ã«ã©ã®ãããªç¹ãèæ ®ããããšãã§ããŸããïŒ
ããïŒ ç³ãèš³ãããŸããããããªãã¯éåžžã«è¯ãç¹ã«åœãã£ããšæããŸãããéåžžã¯èŠèœãšãããŠããŸããããç§ãã¡ãéžè±ããŠããã®ã§ã¯ãªãããšå¿é ããŠããŸããã ïŒslightly_frowning_faceïŒ
ãã«ããŒã ïŒå ¥åãããã®ã¯äœã§ãïŒã«ã¯ããã£ã¯ã¹ãã£ãšã€ã³ã¹ã¿ã³ã¹ã®äž¡æ¹ãå«ããå¿ èŠããããšæããŸãã ãããã©ã®ããã«è¡ããããã¯ãå±æ§åã«ã€ããŠè©±ããŠããã®ãããããæ§ç¯ããéã«äœ¿çšãããåæåã«ã€ããŠè©±ããŠããã®ãã«ãã£ãŠç°ãªããŸãã ã©ã¡ãã«èœã¡çããã®ãããããªãã
ã¯ããè¯ãç¹ã§ãã
åæåãå®è¡ãããšãå
¥åã«æéãããããŸãã ããã¯ãã¢ã»ã³ããªã察象ãšããå±æ§ããããã¯ã©ã¹ã察象ãšããå±æ§ã®æ¹ãéèŠã§ãã ãŸããåãã¯ã©ã¹ã§è€æ°ã®TestFixtureAttributesãèš±å¯ãããŠãããäžæ¹ã®ãã©ã¡ãŒã¿ãŒãä»æ¹ã®ãã©ã¡ãŒã¿ãŒãšççŸããå¯èœæ§ããããããåæåããã©ã¡ãŒã¿ãŒãšããŠTestFixtureAttribute
è¿œå ããªãããã«ããå¿
èŠããããŸãã ããã¯ãã¹ãæã®ãšã©ãŒã§åŠçã§ããŸãããéåžžã¯ç¡å¹ãªç¶æ
ãè¡šçŸã§ããªãããã«ããããšããå§ãããŸãã
ããã€ãã®ãªãã·ã§ã³ãèããŠã¿ãŸãããããããã埮調æŽã§ããŸãã
çŽææ§ãNUnitã®ã¹ã¿ã€ã«ãšã®äžè²«æ§ãé©åãªæè»æ§ã®ãã©ã³ã¹ãåãããã®ãæ¢ããŠããŸãã ïŒã»ãšãã©ã®å Žåããããã¯ãã§ã«éè€ããŠããã¯ãã§ããðïŒ
`` `cïŒ
[ã¢ã»ã³ããªïŒFixtureOptionsïŒInstancePerTestCase = trueïŒ]
[FixtureOptionsïŒInstancePerTestCase = falseïŒ]
ã¯ã©ã¹SomeFixture
{{
}
Pro: extending later if there's ever more options for fixture handling (doubtful?)
Pro: two names so there's less stuffed into a single name
Con: `[FixtureOptions]` would be legal but highly misunderstandable syntax. (Does it reset the assembly-wide setting to the default, `false`, or does it have no effect, e.g. `null`?)
### Proposal B
```c#
[assembly: FixtureOptions(FixtureCreationOptions.PerTestCase)]
[FixtureOptions(FixtureCreationOptions.Singleton)]
class SomeFixture
{
}
public enum FixtureCreationOptions
{
Singleton, // = default
PerTestCase,
// Doubtful there will be other options?
// Maybe Pool, where we reset and reuse between nonconcurrent tests?
}
é·æïŒç¡å¹ãªç¶æ
ã¯è¡šçŸã§ããŸãã
é·æïŒãã£ã¯ã¹ãã£åŠçã®ãªãã·ã§ã³ãããã«ããå Žåã¯åŸã§æ¡åŒµããŸãïŒçãããã§ããïŒïŒ
çæïŒå±æ§åãšåæååã®äž¡æ¹ãå
¥åããéã®åé·æ§
`` `cïŒ
[ã¢ã»ã³ããªïŒFixtureInstancePerTestCase]
[FixtureInstancePerTestCaseïŒfalseïŒ]
ã¯ã©ã¹SomeFixture
{{
}
`` `
é·æïŒç¡å¹ãªç¶æ
ã¯è¡šçŸã§ããŸãã
ããïŒèª€è§£ãã«ããã§ãïŒãã ããç§ã¯æ°ãããŠãŒã¶ãŒã§ã¯ãªããããããã«ç²ç¹ããããŸãïŒ
çæïŒé·ãåå
å€åçæïŒãªãã·ã§ã³ãšå€ã®äž¡æ¹ãæå®ã§ããéåžžã«å
·äœçãªååã ïŒããããç§ã奜ããª[NonParallelizable]
ãããŸããïŒ
ïŒå¥ã®ææ¡ãæè¿ããŸãïŒïŒ
2ã€ã®å±æ§ãæã£ãŠããããšã«ã€ããŠèšãã¹ãããšããããŸãã1ã€ã¯ã¢ã»ã³ããªçšã§ããã1ã€ã¯ã¯ã©ã¹èªäœçšã§ãã
é·æïŒã³ã³ããã¹ãå
ã§åäœãç°ãªã1ã€ã®å±æ§ã§ã¯ãªãã2ã€ã®åçŽãªå±æ§ãå®è£
ããæ¹ãç°¡åã§ãã ïŒParallelizableAttributeããåŠãã æèšïŒ
é·æïŒããããã«é©åãªååãä»ããããšãã§ããããããŠãŒã¶ãŒãç解ãããããšæãããŸãã ããšãã°ãã¢ã»ã³ããªã¬ãã«ã«ãããã©ã«ãããšããåèªãå«ããããšãã§ããŸãã
çæïŒèŠããŠããã¹ã2ã€ã®å±æ§ã
ããããã®éžæè¢ã䜿çšããã¢ãããŒãïŒ
`` `CïŒ
[ã¢ã»ã³ããªïŒDefaultFixtureOptionsïŒInstancePerTestCase = trueïŒ]
[FixtureOptionsïŒInstancePerTestCase = falseïŒ]
ã¯ã©ã¹SomeFixture
{{
}
[ã¢ã»ã³ããªïŒDefaultFixtureOptionsïŒFixtureCreationOptions.PerTestCaseïŒ]
[FixtureOptionsïŒFixtureCreationOptions.SingletonïŒ]
ã¯ã©ã¹SomeFixture
{{
}
[ã¢ã»ã³ããªïŒDefaultFixtureInstancePerTestCase]
[FixtureInstancePerTestCaseïŒfalseïŒ]
ã¯ã©ã¹SomeFixture
{{
}
`` `
ä»ã®ã³ã¡ã³ãïŒ
ãšããã§ãã¢ã»ã³ããªã¬ãã«ãšãã£ã¯ã¹ãã£ã¬ãã«ã«DefaultTestCaseTimeOutã䜿çšããã¡ãœããã®ã¿ã«ã¿ã€ã ã¢ãŠããèšå®ããããšæã£ãŠããŸããã
ãã®å¯èœæ§ãæèµ·ããŠãããŠããããšãã
ä»ç§ãæ©ãŸããŠããã®ã¯ãç§ãã¡ããã®æ¹åã«é²ãã§ããªããšããŠããããã¯çè«çã«ã¯çã«ããªã£ãŠããå¯èœæ§ããããšããããšã§ãã
c#
[DefaultFixtureOptions(InstancePerTestCase = true)]
class SomeFixture
{
[FixtureOptions(InstancePerTestCase = false)]
public void SomeTest()
{
}
}
ãããå®éã«å®è¡ãããã¬ãã«ã¯ããã£ã¯ã¹ãã£ã¬ãã«èªäœã§ã¯ãªãããã¹ãã±ãŒã¹ã¬ãã«ã§ããããã§ãã
äŸãšããŠã掟çãã£ã¯ã¹ãã£ã¯åºæ¬ãã£ã¯ã¹ãã£ã®èšå®ããªãŒããŒã©ã€ãããå ŽåããããŸãããå®éã«è¡ãããŠããã®ã¯ã掟çã¯ã©ã¹ã«ãã£ãŠçæãããåãã¹ãã±ãŒã¹ã®èšå®ã«åœ±é¿ãäžããããšã ãã§ãã
ãŸãã¯ïŒ
`` `cïŒ
[ã¢ã»ã³ããªïŒDefaultFixtureOptionsïŒInstancePerTestCase = trueïŒ]
//ãããããã©ã«ããšèŠãªãããã¹ãã§ã¯ãªãã®ã¯ãªãã§ããïŒ
[DefaultFixtureOptionsïŒInstancePerTestCase = trueïŒ]
ãããªãã¯æœè±¡ã¯ã©ã¹BaseFixture
{{
}
ãããªãã¯ã·ãŒã«ã¯ã©ã¹SomeFixtureïŒBaseFixture
{{
}
`` `
Default
ããã€ããã€äœ¿çšããªããã«ã€ããŠã®è«ççæ ¹æ ãã©ã®ããã«èãåºãã®ã§ããïŒ
ãã®å±æ§ãåãã¹ãã±ãŒã¹ã«å®è£ ãããšãéåžžã«è€éã«ãªããŸãããã¡ãªããã¯ãããã§ãã
ãéåžžã®ããã¹ããã£ã¯ã¹ãã£ã®å Žåããã¹ããã£ã¯ã¹ãã£ã«é¢é£ä»ããããã³ãã³ããã§ãŒã³ã®äžéšãšããŠã€ã³ã¹ã¿ã³ã¹ãã€ã³ã¹ã¿ã³ã¹åãç¶ããŸãã ããšãã°ããã¹ãããšã®ãã£ã¯ã¹ãã£ã®å Žåãããã§ã€ã³ã¹ã¿ã³ã¹åããããšã¯ãããŸãããããã¹ããã§ãŒã³ã®äžéšãšããŠæ°ããã³ãã³ããå®è£ ããå¿ èŠããããŸããããã¯ããã£ã¯ã¹ãã£ãã§ãŒã³ã§çŸåšè¡ãããŠããããšãšã»ãŒåãããšãè¡ããŸãã
ãã£ã¯ã¹ãã£ã«äž¡æ¹ã®ã¿ã€ãã®ãã¹ããå«ãŸããŠããå¯èœæ§ãããå Žåã¯ãã¢ãã«ããšã«1åãã€ã2åå®è¡ããå¿ èŠããããŸãã
ãŠãŒã¶ãŒã¯ãã¹ããå¥ã ã®ãã£ã¯ã¹ãã£ã«åå²ããããšã§åãããšãç°¡åã«éæã§ãããããã¡ãªããã¯å°ããããã«æãããŸãã çµå±ã®ãšããããã£ã¯ã¹ãã£ã¯NUnitã¢ãŒãã£ãã¡ã¯ãã§ãããåããã£ã¯ã¹ãã£ã®åäœãå¿ èŠãšãããã¹ããåããã£ã¯ã¹ãã£ã«é 眮ããããã«ãŠãŒã¶ãŒã«èŠæ±ããããšã¯åççã§ãã
ãããã©ã«ããããã€äœ¿çšãããã«ã€ããŠã¯ãã©ã®TestFixxtureã§ã䜿çšãããã¢ã»ã³ããªã¬ãã«ã§ã®ã¿äœ¿çšããããã«æãããŸãã å±æ§ã¯ç¶æ¿ã«ãã£ãŠæŽŸçã¯ã©ã¹ã§å®éã«èŠã€ãããããåºæ¬ã¯ã©ã¹ãäŸå€ã§ã¯ãããŸããã ãããã£ãŠãããŒã¹ã§ç¹å®ã®åäœãèšå®ããããšã¯ããã©ã«ãã§ã¯ãããŸããã ããããããã¯ãã®ã¯ã©ã¹ãšãããã掟çãããã®ã®èšå®ã§ãã çŸåšç¶æ¿ãããŠããå±æ§ã®ãã¹ãŠã®å Žåãšåæ§ã«ãççŸããä»æ§ã¯ãšã©ãŒãåŒãèµ·ãããç¡èŠããå¿ èŠããããŸãã ã€ãŸããå±æ§Aãåºæ¬ã¯ã©ã¹ã«é 眮ããBã掟çã¯ã©ã¹ã«é 眮ããããšã¯ãAãšBãåºæ¬ã¯ã©ã¹ã«çŽæ¥é 眮ããããšãšåºå¥ãããŸããã ãŠãŒã¶ãŒãä»ã®ããšãããã®ã¯æå€ãªã®ã§ããã®ããã«èšèšããŸããã
WRTã»ããã¢ãããã£ã¯ã¹ãã£ããšããã§ãããã§ããããã®ã€ã³ã¹ã¿ã³ã¹åãªãã·ã§ã³ãæå®ãããšãã©ã³ã¿ã€ã ãšã©ãŒãçæãããã¯ãã§ãã SetUpFixturesã¯TestFixturesã§ã¯ãããŸããã
ã€ãŸããå±æ§Aãåºæ¬ã¯ã©ã¹ã«é 眮ããBã掟çã¯ã©ã¹ã«é 眮ããããšã¯ãAãšBãåºæ¬ã¯ã©ã¹ã«çŽæ¥é 眮ããããšãšåºå¥ãããŸããã ãŠãŒã¶ãŒãä»ã®ããšãããã®ã¯æå€ãªã®ã§ããã®ããã«èšèšããŸããã
ãããç§ã¯[Apartment]
ãŸãã¯[Parallelizable]
ãåºæ¬ã¯ã©ã¹ãŸãã¯åºæ¬ã¡ãœããã®èšå®ã眮ãæããããšãæåŸ
ããŠããŸããïŒ
ããã¯ãã¹ãŠç§ã«ã¯çã«ããªã£ãŠããŸãã
FixtureCreationOptions
ãªã©ã®åæåãå¿
èŠã§ããããšãé€å€ã§ããŸããïŒ PerTestCase
ã PerFixture
ãæ¶ç©ºã®ReusedPerTestCase
ïŒ
ç§ã¯æ¬¡ã®åçŽãã«åŸããŠããŸãïŒ
`` `cïŒ
[ã¢ã»ã³ããªïŒDefaultFixtureOptionsïŒInstancePerTestCase = trueïŒ]
[FixtureOptionsïŒInstancePerTestCase = falseïŒ]
ã¯ã©ã¹SomeFixture
{{
}
Hypothetical other creation options would then be added this way:
```c#
[FixtureOptions(InstancePerTestCase = false, ReuseInstances = true)]
@ nunit / framework-teamããªãã®å¥œã¿ã¯äœã§ããïŒ
ããã«ãããã
[assembly: DefaultFixtureOptions(InstancePerTestCase = true)]
ãã¶ãç§ã ããããããŸããããäžè¬çã«ç§ã¯ãããŒã¯ããããªããžã§ã¯ããç¹å®ã®ç¹æ§ãæã£ãŠããããšã瀺ããã®ãšããŠå±æ§ãç解ããŠããŸãã å±æ§ãžã®åŒæ°ã¯ãããããã°ããã®ç¹æ§ãæŽç·ŽããŠããŸãã ããšãã°ãSerializableãèããŠã¿ãŸãããããªããžã§ã¯ãã¯ã·ãªã¢ã©ã€ãºå¯èœã§ãããè£ é£ŸãããŠããªãå Žåã¯ããã§ã¯ãããŸããã InternalsVisibleTo--ç¹å®ã®äœãã«èŠããå éšãåŒæ°ã¯ãããæŽç·ŽããŸããããã§ãªãå Žåãå éšã¯äœã«ãèŠããŸãããäžéšã®å±æ§ã¯ãã¿ãŒã³ã«åŸã£ãŠããŸãããããããã¯éåžžäœã¬ãã«ã§ãïŒäŸïŒCompilationRepresentationãMethodImplïŒã ãããã«ã¯éåžžãå¿ é ã®ã³ã³ã¹ãã©ã¯ã¿ãŒåŒæ°ãä»å±ããŠããŸãã
ä»èããŠã¿ãŸãããc#
[assembly: DefaultFixtureOptions]
InstancePerTestCase
ãžã®å²ãåœãŠã¯ãªãã·ã§ã³ã§ãããããããã¯æŽåœ¢åŒã®CïŒã§ãã ããã¯æå³çã«äœãè¡šçŸããŠããŸããïŒ
ç§ã«ã¯ã [assembly: DefaultFixtureInstancePerTestCase]
æ¹ãèªç¶ã«æããŸãïŒã»ã¹ããããªã¢ã³åãé€ããŠãããã¯åãªãæèŠã§ãããçŸçã«ä¿åããããšã¯æ£åœåãããŸããïŒã 1ã€ã®å±æ§ã1ã€ã®ç¹æ§ã ãããããããã¯ãã©ã¡ãŒã¿ããªãã·ã§ã³ã§èšå®å¯èœãªããããã£ãå¿
èŠãšããŸããã
ãŸãããŠãŒã¶ãŒãšããŠãååãç°ãªã2ã€ã®å±æ§ãããã1ã€ã¯ã¢ã»ã³ããªã¬ãã«ïŒ DefaultSomething
ïŒã«ã®ã¿é©çšå¯èœã§ããã1ã€ã¯ã¿ã€ãã¬ãã«ïŒ Something
ã®ã¿ïŒã«ã®ã¿é©çšå¯èœã§ããããšã«é©ããŠããŸãã ã åœç¶ã @ CharliePooleãParallelizableå±æ§ã«é¢ããŠèšåãããåŠç¿ããã¬ãã¹ã³ããäœã§ãã£ããã¯ããããŸãããã島ã®ãã¡ãåŽããã¯ãïŒãã®ãŠãŒã¶ãŒã®è¡šé¢çãªèãæ¹ã§ïŒã©ãã§è¡ãããåŠç¿ããããã®å±æ§ã®ãã¢ã¯åœæããŠããããã§ãã
@ kkm000åäžã®ç¹æ§ãè¡šãå±æ§ã«ã€ããŠã®ããªãã®ã³ã¡ã³ãã«åæããŸãã
ç°ãªãã¬ãã«ã§ã®ãåããç¹æ§ã®2ã€ã®ç°ãªãå±æ§ãWRTããŸããããããå®éã«åãã§ãããšæã£ãå Žåãç§ã¯åæããŸãã ããããç§ã¯åœŒããããã§ã¯ãªããšæããŸãã äŸãšããŠã¿ã€ã ã¢ãŠãã䜿çšããŸãã
ãã¹ãã¡ãœããã«ã¿ã€ã ã¢ãŠããèšå®ãããŠããå Žåã¯ããå®è¡ã«æå®ãããããªç§æ°ãè¶ ãããšããã®ãã¹ãã¡ãœããã¯ã¿ã€ã ã¢ãŠãã«ãªããŸãããšããæå³ã§ãã ãã ããã¿ã€ã ã¢ãŠãããã£ã¯ã¹ãã£ãŸãã¯ã¢ã»ã³ããªã«é 眮ããããšãæå³ãç°ãªããŸããããã®ã¢ã€ãã ã«å«ãŸãããã¹ãŠã®ãã¹ãã±ãŒã¹ã®ããã©ã«ãã®ã¿ã€ã ã¢ãŠãã¯ãæå®ãããããªç§æ°ã§ããã ãã¡ããããã®ããã©ã«ãã¯ãããäœãã¬ãã«ã§ãªãŒããŒã©ã€ããããå¯èœæ§ããããŸãã ã¡ãªã¿ã«ã2ã€ã®å¥ã ã®å®è£ ããã2ã€ã®ããªãç°ãªãæå³ã 1ã€ç®ã¯ãã¿ã€ã ã¢ãŠãã衚瀺ããããã¹ãã«ã¿ã€ã ã¢ãŠããé©çšããŸãã 2ã€ç®ã¯ãããã©ã«ãããã¹ãã³ã³ããã¹ãã«æ ŒçŽããå«ãŸããŠãããã¹ãã±ãŒã¹ãæ€åºããããšãã«ããã©ã«ããšããŠäœ¿çšãããŸãã ParallelizableAttributeãåæ§ã«æ©èœããŸãã
ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ããã£ã¯ã¹ãã£ã«é 眮ãããå±æ§ã¯ããã¹ãã±ãŒã¹ããšã«1åãã®ãã£ã¯ã¹ãã£ãã€ã³ã¹ã¿ã³ã¹åãããããšãæå³ããŸãã ã¢ã»ã³ããªã¬ãã«ã§ã¯ããç¹ã«æå®ããªãéãããã®ã¢ã»ã³ããªã®ãã¹ããã£ã¯ã¹ãã£ããã£ã¯ã¹ãã£ããšã«1åã€ã³ã¹ã¿ã³ã¹åãããããšãæå³ããŸãã
ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ããã£ã¯ã¹ãã£ã«é 眮ãããå±æ§ã¯ããã¹ãã±ãŒã¹ããšã«1åãã®ãã£ã¯ã¹ãã£ãã€ã³ã¹ã¿ã³ã¹åãããããšãæå³ããŸãã ã¢ã»ã³ããªã¬ãã«ã§ã¯ããç¹ã«æå®ããªãéãããã®ã¢ã»ã³ããªã®ãã¹ããã£ã¯ã¹ãã£ããã£ã¯ã¹ãã£ããšã«1åã€ã³ã¹ã¿ã³ã¹åãããããšãæå³ããŸãã
æåŸã®æã§ééã£ã話ããããšä»®å®ãããšã_ "ç¹ã«æå®ããªãéãããã®ã¢ã»ã³ããªã®ãã¹ããã£ã¯ã¹ãã£ãããã£ã¯ã¹ãã£ã
ç§ããŠãŒã¶ãŒãšããŠãã»ãã³ãã£ã¯ã¹ã¯ãŸã£ããç°ãªã£ãŠããªãããã«èŠãããšä»®å®ãããšããå±æ§ã§ã¯ããå éšã¹ã³ãŒããç°ãªã£ãŠããŒã¯ãããŠããªãéãã確ãã«ãã®ãããªå éšã¹ã³ãŒãã§ãããããããã£ã¯ã¹ãã£ã§ããããšã¢ã»ã³ããªã§ããããšã ç§ã®æèŠã§ããã2ã€ã®å±æ§ã¯å°ãçŽããããããã«èŠããŸãã å€åããã¯ç§ã®èãæ¹ã§ããç§ã¯æ¬åœã«ç¥ããŸããã
2ã€ã®å¥ã ã®å®è£
ãŠãã³ãŒã³ãšã¬ã€ã³ããŒã®ã²ãã³ã±ã³ã¯ãŒã«ãã§ã¯ãå®è£ ã¯ãŠãŒã¶ãŒåŽã«åœ±é¿ãäžããŸããã ããããç§ãã¡ïŒNUnitãã¶ã€ããŒãšãã®ãŠãŒã¶ãŒã®1人ïŒã¯ãã¹ãŠãšã³ãžãã¢ã§ããããšã³ãžãã¢ãªã³ã°ã¯åŠ¥åããã¹ãŠã§ãã ç°ãªãã¹ã³ãŒãã«1ã€ã®å±æ§ã䜿çšããããšããå®éã«å éšã®äžåšçšããšã¡ã³ããã³ã¹ã®è² æ ã«ã€ãªããå Žåãç§ã¯ãŸã£ããã°ãªããããŸããã :)
çµå±ãããã¯å°ããªåé¡ã§ãããåãå±æ§ã匷ãæãããã©ã¡ãã®æ¹æ³ã§ãå±æ§ãé 眮ããŠçããããšãã§ããŸãã
@ kkm000ã¯ããããã¹ãã±ãŒã¹ããšã«1åããæå³ããŠããŸããã
ãã¹ããããäžé£ã®ã¹ã³ãŒããšèãããšããã¹ãŠãå®å šã«çã«ããªã£ãŠããããšã«åæããŸãã ãã ããçµéšã«ããã°ããŠãŒã¶ãŒã¯ïŒaïŒåžžã«ãã®ããã«èããŠãããšã¯éããªãããïŒbïŒã¹ã³ãŒãã®å®çŸ©ãæ£ããç解ãããŠããŸããã
æåŸã®äŸãšããŠããã¹ããããã¯ã©ã¹ãšåºæ¬ã¯ã©ã¹ã«ã€ããŠèããŠã¿ãŸãããã ã©ã¡ããNUnitã«ãã£ãŠãã¹ãç®çã§ãã¹ãããããã¹ã³ãŒãããšããŠæ±ãããŸãããããŠãŒã¶ãŒã«ã¯ãã®ããã«èŠããå ŽåããããŸãã
ãã£ã¯ã¹ãã£ã®ã¿ã€ã ã¢ãŠãã¯ããã£ã¯ã¹ãã£å šäœã«ã¿ã€ã ã¢ãŠããé©çšãããããšãç°¡åã«æå³ããå¯èœæ§ããããããã¿ã€ã ã¢ãŠã/ããã©ã«ãã¿ã€ã ã¢ãŠãã§èª¬æããåé¡ã¯ããå°ãæ·±å»ã§ããããã¡ããããã§ã¯ãããŸããã ããã«èšãã°ãã¢ã»ã³ããªã®ã¿ã€ã ã¢ãŠãã¯ã¢ã»ã³ããªå šäœã«é©çšãããå ŽåããããŸãããé©çšãããŸããã
ãã®å Žåãååã«ããã¹ãã±ãŒã¹ããšãã䜿çšããŠãããããã©ã¡ãã®æ¹åã«ãç°¡åã«ç§»åã§ããããããããŸãããå°ãªããªã£ãŠããããã§ãã ãšã«ããåãçµãã§ããŸããã ïŒç¬é¡ïŒ
èããŠã¿ããšãTimeoutãTestCaseTimeoutãšåŒã°ããŠãããšãããããã£ãšè¯ãã£ãã§ãããã
ç§ã¯åäžã®[FixtureInstancePerTestCase]
æºè¶³ããŠããŸãã ãŠãŒã¶ãŒã®ç²Ÿç¥çè² æ
ãæãå°ãªãããã§ãã
@ nunit / framework-team https://github.com/nunit/nunit/issues/2574#issuecomment -426347735ããã¹ããã³ã°ããŠãæ¹åæ§ã決ããã®ãæäŒã£ãŠããã ããŸãããïŒ
[FixtureInstancePerTestCase]
ãç§ã®æãå«ããªãªãã·ã§ã³ã§ãã ðæ¡åŒµæ§ã®æ¬ åŠãå¯äžã®æ¬ ç¹ã§ãã
ç§ã¯[FixtureOptions]
åé¡ã奜ãã§ã¯ãããŸãã-ããã¯ããŸãã«ãæ··ä¹±ããŠãããšæããŸãã å人çã«ã¯ãã¢ã»ã³ããªãšã¯ã©ã¹ã®äž¡æ¹ã«åäžã®å±æ§ã䜿çšããããšæããŸããããã«ããã以åã¯TimeoutãšParalellizableã®åé¡ãçºçããŠããŸããããååã«ãFixtureããå«ãŸããŠãããšããããŸãããå°ãªããªããŸãã
ç§ã¯å人çã«åæåãªãã·ã§ã³ã奜ãã ãšåŒçšããŠããŸã...ãããããç°¡æœã«ããããã«é©åã«ååãä»ããæ¹æ³ãèããããšãã§ããªãããšãé€ããŠïŒ
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
æŽæ°ã¯ãã®åé¡ã«æçš¿ãããŸãã
誰ãããã®åé¡ã解決ã§ããŸããïŒ
çŸåšããã¹ãŠã®ãã¹ãã³ãŒãã次ã®ããã«ã©ããããå¿
èŠããããŸãã
csharp
[Test]
public void TestExample(){
using(var tc = new MyTestContext()){
//code goes here
}
}
ãã®æ©èœã䜿çšãããšãã»ããã¢ããæã«ãã¹ãã³ã³ããã¹ããåæåããç Žæ£æã«ç Žæ£ããã¹ã¬ããã»ãŒãã«ããããšãã§ããŸãã
ããã«ã¡ã¯ãç§ãã¡ã®äŒç€Ÿã§ããã®åé¡ã«çŽé¢ããŠããŸãã ãã®æ©èœããµããŒããããã¬ãŒã ã¯ãŒã¯ïŒPy.TestïŒãã移è¡ããŠããã®ã§ãããã¯ã¡ãã£ãšããèœãšãç©Žã§ãã ãã®ã€ã³ã¹ã¿ã³ã¹åãå¶åŸ¡ãããœãŒã¹ã³ãŒããèŠããŠããã ããã°ããã©ãŒã¯ããŠå¿ èŠãªå€æŽãå ããããšãã§ããŸãã
@MChiciak
ãã®åé¡ãããã«ä¿®æ£ãããªãå Žåã¯ãxUnitãžã®ç§»è¡ãæ€èšããŠããŸããããã¯ãxUnitã§ã¯ãããããã©ã«ãã®åäœã§ããããã§ãããxUnit.netã¯ãå®è¡ããããã¹ãŠã®ãã¹ãã«å¯ŸããŠãã¹ãã¯ã©ã¹ã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã httpsïŒ// xunit .github.io / docs / shared-context
@ LirazShay ã @ MChiciakç§ããã®åé¡ã«ééããŸãããã @ CharliePooleã®ãã€ã³ãã«åæããŸãã ããã§ãSetUp [ThreadStatic]
åæåããããã¹ãåºæã®ãã£ãŒã«ããäœæããŸããããæ£åžžã«æ©èœããŸãã
@dfal
çŽ æµãªåé¿çãããããšãïŒ
ç§ã¯ããã倧奜ãã§ãã ç§ã¯çŸåšãnunitã§å®è¡ãããŠããäœåãã®ãã¹ããå«ãæ¢åã®ãã¹ãã¹ã€ãŒããæã£ãŠããŸãããå ±æç¶æ ã®ããã«ç°¡åã«äžŠååããããšã¯ã§ããŸããã ãã®ãªãã·ã§ã³ãæäŸãããŠããã°ããã¹ãã¹ã€ãŒããã¯ããã«ç°¡åã«äžŠååã§ããŸãã
æèå®éšãšããŠãTestFixtureã®åäœãåçŽã«å€æŽãããšæ³åããŠãã ããã ããã¯äœãå£ããŸããïŒ
é åºä»ãã䜿çšãããããã¹ãã«ãã£ãŠè¡ãããç¶æ ã®å€æŽã«äŸåããŠä»ã®ãã¹ãã«åœ±é¿ãäžãããã¹ãã ããã¯ãïŒããããïŒç¬ç«ããåäœãã¹ãã®å Žåã«ã¯éåžžã«æªãç¿æ £ã§ãã ç§ãã¡ã¯åžžã«ãããè¡ããªãããã«äººã ã«èŠåããŠããŸããããããŠç§ã¯ãã®ããã«åäžã®ã€ã³ã¹ã¿ã³ã¹ãæã€ããšã«äŸåãããã¹ãïŒãã¡ããã¡ãã»ãŒãžä»ãïŒãç Žã£ãŠãããŸããŸããã
1åéãã®ã»ããã¢ããã§è¡ãããããšã«ãã£ãŠã¯ãåã ã®ãã£ã¯ã¹ãã£ã€ã³ã¹ã¿ã³ã¹ã䞊è¡ããŠå®è¡ã§ããªãå¯èœæ§ããããŸãã ããã¯ç®èãªããšã§ããå€æŽã®åæ©ã¯ããã£ã¯ã¹ãã£ã䞊è¡ããŠå®è¡ã§ããããã«ããããšã ããã§ãã ããã¯ããã§ã«äžŠåã§å®è¡ã§ããªãããããã®æ©èœãå¿ èŠãšãã人ã ã«ãšã£ãŠã¯é倧ãªå€æŽã§ã¯ãããŸãããã䞊ååã§ããªããOneTimeSetUpãã®äžŠåå®è¡ã«ãã§ã«äŸåããŠãã人ã ã«ãšã£ãŠã¯é倧ãªå€æŽã§ãã
ãã£ã¯ã¹ãã£ã¬ãã«ã®OneTimeSetUp
ã¯ãè€æ°åå®è¡ãããããã«ãªããŸããã ããã«ããã1åéãã®ã»ããã¢ããã«ããå¹çã®åäžããªããªããå Žåã«ãã£ãŠã¯ã»ãã³ãã£ã¯ã¹ãå€æŽãããå¯èœæ§ããããŸãã ç¹ã«ãåæåãäœããã®åœ¢ã§ã°ããŒãã«ç¶æ
ã«åœ±é¿ãäžããå ŽåïŒããŒã¿ããŒã¹ã®ã»ããã¢ãããªã©ïŒããšã©ãŒãçºçããå¯èœæ§ããããŸãã ããã¯ç§ã«ã¯å®¹èªã§ããªãç Žæã®ããã«æããŸãã
ãã®æèå®éšã¯ããã£ã¯ã¹ãã£ã®ãã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹åãå®è£ ããæ¹æ³ãèããã®ã«åœ¹ç«ã€ããšãããããŸããã NUnit 3ã§å°å ¥ãããå Žåã¯ãæããã«æ°ããããã©ã«ã以å€ã®æ©èœã§ããå¿ èŠããããŸããNUnit4ãŸãã¯ãã®ä»ã®æ°ãããã¬ãŒã ã¯ãŒã¯ïŒTestCentricãªã©ïŒã®å Žåãæ°ããåäœãç°¡åã«ããã©ã«ãã«ãªãå¯èœæ§ããããŸãã
泚æãšããŠãMSTestã®TestClass
ãšTestMethod
ãããããTestFixture
ãšTest
眮ãæããã ãã§ãNUnitãšMSTestã®ã»ãã³ãã£ã¯ã¹ãç°ãªãããšãããããŸããã MSTestã¯ããã¹ãããšã«æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããŸãããããèªãã§ãããã¹ãŠã®äººãç¥ã£ãŠãããšæããŸãããNUnitã¯TestFixtureã€ã³ã¹ã¿ã³ã¹ãåå©çšããŸãã
ãã®ç§»è¡ã容æã«ããããã«ã TestFixture(lifeCycle = OneTestPerInstance)]
ãªã©ãèšè¿°ã§ããã°äŸ¿å©ã§ãã
_editïŒ_å®éã Setup
ã¡ãœããã䜿çšããããã«ãã¹ãã移æ€ãããšãããæ¢åã®ã³ãŒãã€ãã·ã£ã©ã€ã¶ãŒ/ããã©ã¢/ãã£ã¢ããŠã³ã³ãŒããMSTestã®äžã§ããªãæ·åãããçŸåšã¯åçŽãªããããã£ã€ãã·ã£ã©ã€ã¶ãŒã³ã³ã¹ãã©ã¯ã¿ãŒã§ããããšãããããŸããããã£ãšè¯ããŠå®æ床ãé«ãã®ã§ã翻蚳ããŠããã£ãã§ãã ããã§ããäºææ§ã®åé¡ãšããŠãæã£ãŠãããšããã§ãããã
@CharliePoole
é åºä»ãã䜿çšãããããã¹ãã«ãã£ãŠè¡ãããç¶æ ã®å€æŽã«äŸåããŠä»ã®ãã¹ãã«åœ±é¿ãäžãããã¹ãã
ãããã¯ããå£ããŠããããã®ãã¹ããç Žã£ãŠãã ãããããªããé¡ãããŸã!!! ð€£ããã¯ç§ãèããããšãã§ãããŠããããã¹ããã¬ãŒã ã¯ãŒã¯ã®ææªã®æªçšã§ãã
ãã£ã¯ã¹ãã£ã¬ãã«ã®
OneTimeSetUp
ãããšãç§ã¯ãã€ããããããã»ã¹ããšã«äžåºŠå®è¡ããããšæã£ãŠããŸãã...ç§ã¯ãã€ããããéçã§ã¯ãªãã®ã¯ãªãã ãããšæã£ãŠããŸããã
ãããããããããã©ãŒãã³ã¹ãéåžžã«æå¹ãªãã€ã³ãã§ãã
ãã®æ©èœã¯2幎以äžåããè°è«ãããŠããŸãããäžå¿«ã«æãããããã§ã¯ãããŸããããè¿ãå°æ¥ã«å®éã«å®è£ ããããã®å ·äœçãã€çŸå®çãªèšç»ã¯ãããŸããïŒ
ç§ã®ããŒã ãå¥ã®ãã¬ãŒã ã¯ãŒã¯ãžã®ç§»è¡ãèšç»ããå¿ èŠãããã®ãââããããšãä»åŸæ°ãæ以å ã«è§£æ±ºãããã®ãããã®åé¡ã¯ç§ãã¡ã«ãšã£ãŠç®ãèŠåŒµããã®ã§ãããããç¥ããããšæããŸãã
ããã¯ãã¹ãã®å®è¡æ¹æ³ã«å¯Ÿãã倧ããªå€æŽã§ãããçŸåšã®æ©èœã«äŸåããŠãã人ãå®å šã«å£ããªãããã«ãå®å šãªåœ±é¿ãèæ ®ããå¿ èŠããããŸãã
ãããã解決ãããæè¯ã®æ¹æ³ã¯ããã¹ãã¯ã©ã¹ã®ã¹ã¬ãããå®å
šã«ããããšã§ãã ä»ã®åªãããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ãšåæ§ã«ãã¹ã¬ããã»ãŒããæåªå
ãããŸãã
ããšãã°ãsetupã¡ãœããã§ã»ããã¢ããããŠãããå€ãã®ãã¹ãã¡ãœããã§äœ¿çšãããã£ãŒã«ãã䜿çšããŠããå Žåãã¯ã©ã¹ã¯ã¹ã¬ããã»ãŒãã§ã¯ãããŸããã ããã¯NUnitã®æ¬ é¥ã§ã¯ãããŸããã ã¹ã¬ããã»ãŒãã§ã¯ãªãã·ã³ã°ã«ãã³ãäœæããŸããã
TestFixtureå
ã«ãµãã¯ã©ã¹ãäœæããŠãåãã¹ãã®äžéšãšããŠäœæããã³ã³ããã¹ãæ
å ±ãä¿æããããšã§ãã·ã³ã°ã«ãã³TestFixtureãã¹ã¬ããã»ãŒãã§ããããšã確èªããŸã...ãããã£ãŠ...åé¡ãã解決ãããŸãã
ãããã£ãŠããå¥ã®ãã¬ãŒã ã¯ãŒã¯ãžã®ç§»è¡ãã«æéãè²»ããã®ã§ã¯ãªããã·ã³ã°ã«ãã³TestFixturesãã¹ã¬ããã»ãŒãã«ããããã«ãã®æéãè²»ãããããšããå§ãããŸãã
ããšãã°ãNUnit TestFixtureãã·ã³ã°ã«ãã³ã§ãããšããäºå®ã«æåã«ééãããšãã500ãè¶ ãããã¹ããå«ã100以äžã®ãã¹ããã£ã¯ã¹ãã£ãã¹ã¬ããã»ãŒãã«å€æããŸããïŒRhinoMocksãã¹ã¬ããã»ãŒãã§ã¯ãªããããRhinoMocksããMoqã«ç§»åããå¿ èŠããããŸããïŒãç§ã¯çŽ4é±éã§ãïŒæ£çŽãªãšãããRhino-> Moqã¯ãã®æéã®ã»ãšãã©ãè²»ãããŸããïŒïŒ
ååãšããŠ100ïŒ æ£ããã§ããã7000以äžã®åäœãã¹ãã®æ¢åã®ãã¹ãã¹ã€ãŒããããå Žåãã¹ã¬ããã»ãŒãã«ãªãããã«æžãçŽãã ãã§ãè«å€§ãªæè³ã«ãªããŸãã
å¥ã®ãã¬ãŒã ã¯ãŒã¯ã«ç§»è¡ãããããæè³ãå€ããã©ããã¯ããããŸãããïŒãããèªååããããŒã«ããããããããŸããïŒããã®æ©èœèŠæ±ã¯ååãšããŠç Žæ£ãããã¹ãã§ã¯ãªããšæããŸããIMO
ç§ã¯ãã®æ©èœãèŠãã¹ãã§ã¯ãªããšäž»åŒµããŠããŸããã
ããããnunitã®åäœæ¹æ³ã«å¯Ÿãããã®ãããªå€§ããªå€æŽã¯ãäžäœäºææ§ïŒéåžžã«é£ããå ŽåããããŸãïŒãŸãã¯æ°ããã¡ãžã£ãŒããŒãžã§ã³ïŒãããå°ããªäœæ¥ã§ã¯ãããŸããïŒã®ããããã«ã€ããŠæ€èšããå¿ èŠããããŸãã
nunitã®ãŠãŒã¶ãŒãã¹ã¬ããã»ãŒãã§ãã«ãã¹ã¬ããç°å¢ã§å®è¡ã§ããããã«ã³ãŒããäœæããæ¹ããããç°¡åãªã¢ã¯ã·ã§ã³ã®åœ¢åŒã§ããããšããå§ãããŸãã ããªãã¯ãããããããã¹ã¯ãªããåããããšããã§ããŸãã
ç§ã¯ãã®ãªããžããªã®å¯çš¿è ã§ã¯ãªãã®ã§ããããã©ã®ããã«å®è£ ãããŠãããã«ã€ããŠã®ã³ã³ããã¹ãã¯ãããŸããã ãã®ãããããã¯ä¿¡ããããªãã»ã©ãã€ãŒããããããŸããããããããªãã·ã§ã³ã®ã¹ã€ãããšããŠå®è£ ããããšã¯ã§ããŸãããïŒ ãããäœãå£ããªãããã«ïŒ
ãã®å šäœã®åé¡ã¯ããªãã·ã§ã³ã®ã¹ã€ãããå®è£ ã§ããããŸããŸãªæ¹æ³ã«ã€ããŠèª¬æããŠããŸã...å€ãã®æ¹æ³ããããŸã
ããã¯ãå®å šã«ãã©ã³ãã£ã¢ã«ãã£ãŠã¹ã¿ãããé 眮ããããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãã æ©èœãåãå ¥ãããããšããããŸã§ã©ãããããŒã å ãŸãã¯å€éšã®èª°ãããããååŸããŠå®è¡ããã®ãåŸ ã¡ãŸãã 誰ã«ã§ãä»äºãå²ãåœãŠããäžåžãã¯ããªãã ãããæãéããããã«å°å¿µããæéããªããã°ã誰ããããããªãã£ãã®ã¯å®éã«ã¯è¯ãããšã§ãã ããããã°ããããå®è¡ããèœåããããèå³ãæã£ãŠãã人ãªã誰ã§ãå©çšã§ããŸãã
PRã¯ãã€ã§ãæè¿ããŸãããNUnitã®ä»ã®å€ãã®ããšãå£ãå¯èœæ§ããããããããã¯ãããã誰ãã«ãšã£ãŠåããŠã®è²¢ç®ã§ã¯ãããŸããã ãšã«ããç§ã®æèŠã
ç§ã¯ãããŸã§ã»ã©ç©æ¥µçã«è²¢ç®ããªããªã£ãã®ã§ããããã©ã®ããã«è¡ãã¹ããã«ã€ããŠã®ç§ã®ã³ã¡ã³ãã¯ããããæã«ãã人ãžã®ã¢ããã€ã¹ãšããŠäžããããŸããã
ç§ã¯ããããã°ããã®éååšããŠããããšã«åæããŸãããããŠç§ã¯ãããèªåã§è¡ãããã®ãèŠããã§ãã
@BlythMeisterã¹ã€ããã¯ãããå°ãåçŽåã
確ãã«ãããã¯ã¹ã€ããã§ãããé»çããªã³ã«ããã ãã§ã¯ãããŸããã ã©ãžãªãAMããFMã«åãæ¿ãããããªãã®ã§ã...ãŸã£ããæ°ããåè·¯ãç»å ŽããŸãã
ãã®å Žåãé¢ä¿ããã®ã¯ãã¹ãã®å®è¡ã«ããããŸã£ããæ°ããã©ã€ããµã€ã¯ã«ã§ãããããããªãã®éã®ã³ãŒãã眮ãæããå¿ èŠããããŸãã å°ããªããšã§ã¯ãããŸããã ãªã¹ã¯ã¯ãæ°ãããåè·¯ããå€ããã®ã«åœ±é¿ãäžããªãããã«ããããšã«ãããŸãã
ç³ãèš³ãããŸãããããã¹ã€ããããåçŽã§ã¯ãªãçç±ã«ã€ããŠãç§ã®èª¬æã¯ãããŸãã§ããã
@BlythMeisterç§ã¯å®éã«ããªãã説æããããšãæ£ç¢ºã«å®è¡ããŸãã-ãã¹ãäžã«ç¶æ ã远跡ãããã¹ããå®äºããåŸã«ããã
ãã¹ãçµæã䜿ã£ãŠäœããããããšã¯ãTearDownãç§ãã¡ãèšèšãããã®ã§ã¯ãªãããšãèŠããŠãããšäŸ¿å©ã§ãã ãã¡ãããå€ãã®äººãããããã®ããã«äœ¿çšããŠããããšãç¥ã£ãŠãããåæ©ãç解ããŠããŸãããTearDownããã¹ãã®äžéšã§ããããããçµãããŸã§çµãããªããšããäºå®ã«æ¬è³ªçã«åž°çããããªãããŒãªã³ãŒããŒã±ãŒã¹ããããããããŸãã
NUnit 3ã§ã¯ããšã³ãžã³æ¡åŒµæ©èœã䜿çšããŠãã¬ãŒã ã¯ãŒã¯ã®å€éšã§çµæã調ã¹ããŠãŒã¶ãŒãå¢ããããšãæåŸ ããŠããŸãããããã¹ãèªäœã®äžã§ã®äœæ¥ã¯ãã銎æã¿ããããã¢ã¯ã»ã¹ããããããã§ãã
@CharliePoole
- ãã£ã¯ã¹ãã£ã¬ãã«ã®
OneTimeSetUp
ã¯ãè€æ°åå®è¡ãããããã«ãªããŸããã ããã«ããã1åéãã®ã»ããã¢ããã«ããå¹çã®åäžããªããªããå Žåã«ãã£ãŠã¯ã»ãã³ãã£ã¯ã¹ãå€æŽãããå¯èœæ§ããããŸãã ç¹ã«ãåæåãäœããã®åœ¢ã§ã°ããŒãã«ç¶æ ã«åœ±é¿ãäžããå ŽåïŒããŒã¿ããŒã¹ã®ã»ããã¢ãããªã©ïŒããšã©ãŒãçºçããå¯èœæ§ããããŸãã ããã¯ç§ã«ã¯å®¹èªã§ããªãç Žæã®ããã«æããŸãã
ãã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹æ©èœãå®è£ ã§ãããOneTimeSetUpã1åã ãå®è¡ã§ããªãã®ã¯ãªãã§ããïŒã¡ã€ã³ã¹ã¬ããããããåŒã³åºãããšãå¿ããªãã§ãã ããïŒã
ããã¯ãã€ã³ã¹ã¿ã³ã¹ãåæåããæ¢åã®OneTimeSetUpãå£ããŠããŸãããã§ããããã¯éåžžã«äžè¬çã§ãã
ããã¯ãã¹ã€ããããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ã®åé¡ã ãšæããŸãã ãã¹ããã£ã¯ã¹ãã£ã®ãŸã£ããæ°ãã代æ¿æ¡ãå®çŸ©ããã°ãããã»ã©åé¡ã«ã¯ãªããŸãããããã¯ãç§ãéåžžã«é åçã ãšæãã¢ãããŒãã§ãã
ããã¯ãã€ã³ã¹ã¿ã³ã¹ãåæåããæ¢åã®OneTimeSetUpãå£ããŠããŸãããã§ããããã¯éåžžã«äžè¬çã§ãã
ããã¹ãã±ãŒã¹ããšã®ã€ã³ã¹ã¿ã³ã¹ãæ©èœãæå¹ã«ãªã£ãŠããå Žåã«ãéçãªOneTimeSetUp
OneTimeTearDown
ã¡ãœãããš
ãã®Githubã®åé¡ã®äž»ãªåæ©ã¯äžŠååã§ããããé©ãæå°ã®ååããšãäºãã«åœ±é¿ãåããã¹ãã«ãã£ãŠåŒãèµ·ãããããšã©ãŒã®åé¿ããåæ©ãšããŠåãå ¥ããããšæããŸãã ïŒä»ã®èª°ãããã§ã«ããã«ã€ããŠèšåããŠããããšãèŠéããå Žåã¯ãè©«ã³ããŸããïŒ
ãã®ããªãå€ãã¹ã¬ããã§ååã«èªã¿è¿ããŠããªãå Žåãç§ã®ã³ã¡ã³ãã¯ãã®æ©èœã«å察ããã®ã§ã¯ãªããææ¡ãããç¹å®ã®å®è£ ã«å察ããŸãã TestFixtureããåäœãç°ãªããŸã£ããæ°ããã¿ã€ãã®ãã£ã¯ã¹ãã£ã«çœ®ãæããããšã奜ã¿ãŸãã
ããã§ã¯é©ãæå°ã®ååãããŸãæ©èœããŠãããšæããŸãã æ°ãããã£ã¯ã¹ãã£ã®åäœãç°ãªã£ãŠããŠãé©ãããšã§ã¯ãããŸããã
äžæ¹ãæ¢åã®ãã£ã¯ã¹ãã£ãå¶åŸ¡ãããã©ã°ãäœæããå ŽåãçŸåšã®å®è£ ã§ãã®ãã©ã°ãåå²ããå¿ èŠããã5ã€ãŸãã¯6ã€ã®ç°ãªãå Žæãèããããšãã§ããŸãã
ããã¯ã2ã€ã®ãã£ã¯ã¹ãã£ã¿ã€ããç¹å®ã®ã³ãŒããå ±æããªãå¯èœæ§ããããšããããšã§ã¯ãããŸããã ããããããã¯ãŠãŒã¶ãŒã®èŠéã®å€ã«ãªããŸãã
@fschmiedãšããã§ãæ°ãããã¬ãŒã ã¯ãŒã¯ïŒãŸãã¯NUnit 4ïŒãå®è¡ããŠããå Žåã¯ã
TestFixtureããåäœãç°ãªããŸã£ããæ°ããã¿ã€ãã®ãã£ã¯ã¹ãã£ã«çœ®ãæããããšã奜ã¿ãŸãã
[...]
ããã§ã¯é©ãæå°ã®ååãããŸãæ©èœããŠãããšæããŸãã æ°ãããã£ã¯ã¹ãã£ã®åäœãç°ãªã£ãŠããŠãé©ãããšã§ã¯ãããŸããã
ãã¡ãããã®éãã§ãã ç§ãèšãããã£ãã®ã¯ãå ã®çš®é¡ã®ãã¹ããã£ã¯ã¹ãã£ã®å Žåãåäœã¯ã»ãšãã©ã®äººã«ãšã£ãŠäŸç¶ãšããŠé©ãã¹ããã®ã§ãããšããããšã§ãã ïŒ2é±éåãå¥ã®ãã¹ãã«åœ±é¿ãäžãããã¹ãã®ã±ãŒã¹ãèŠã€ããååãé©ãããŸããã圌ã¯2013幎ããNUnitã䜿çšããŠããããããã®åé¡ã調ã¹ãŸãããïŒ
ããããã¡ãããããã¯äžäœäºææ§ãå®è£ ã®è€éãããããŠå眪ãæ£ããããšããé¡æã®éã®ãã¬ãŒããªãã§ã[1]ã
OneTimeSetUp
ã®åé¡ã«æ»ãïŒãã¹ããã£ã¯ã¹ãã£ã¯ã©ã¹ããã¹ãããšã«ã€ã³ã¹ã¿ã³ã¹åãããŠããå Žåã§ãããã¹ããã£ã¯ã¹ãã£ããšã«OneTimeSetUp
ãèšå®ããããšã¯äŸç¶ãšããŠéèŠã ãšæããŸãã OneTimeSetUp
ãã€ã³ã¹ã¿ã³ã¹ã®ç¶æ
ãæäœããå Žåã®æ··ä¹±ãé¿ããããã«ããã¹ãããšã®ã€ã³ã¹ã¿ã³ã¹æ©èœã䜿çšããŠOneTimeSetUp
ïŒããã³OneTimeTearDown
ïŒãéçã«åŒ·å¶ããããšãææ¡ããŸãã ïŒã¹ã€ãããšããŠå®è£
ãããŠããããæ°ããçš®é¡ã®ãã¹ããã£ã¯ã¹ãã£ãšããŠå®è£
ãããŠãããã¯é¢ä¿ãããŸãããïŒ
[1] James NewkirkããããæžããïŒ
NUnit V2.0ãäœæãããšãã«çºçããæ倧ã®åé¡ã®1ã€ã¯ãå«ãŸããŠãããã¹ãã¡ãœããããšã«ãã¹ããã£ã¯ã¹ãã£ã¯ã©ã¹ã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããªãããšã§ããã ç§ã¯ãç§ãã¡ããšèšããŸãããããã¯ç§ã®ããã ãšæããŸãã åãã¹ãã¡ãœããã®ãã¹ããã£ã¯ã¹ãã£ã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããããã®JUnitã®çç±ãå®å šã«ã¯ç解ããŠããŸããã§ããã
ãããã圌ã¯ãããæžããŠããŸãïŒ
[...] NUnitã®åäœæ¹æ³ãå€æŽããã®ã¯é£ããã§ããããããŸãã«ãå€ãã®äººãäžå¹³ãèšãã§ããã[...]
:)
ã¯ãããžã ãšç§ã¯ããã«ã€ããŠäœå¹Žãè°è«ããŠããŸããã ïŒsmileïŒç§ãã¡ãåæããããšã®1ã€ã¯æåŸã®æã§ãã ãžã ã¯ã圌ã®å¥œã¿ã®ã¢ãããŒããå®è£ ããåã«ãæ°ãããã¬ãŒã ã¯ãŒã¯ãå®è¡ããããã«åºçºããŸããã ç§ã¯åºæ¬çã«åãããšãããŠããŸãããSetUp / TearDownã¯ç§ãç°ãªãæ¹æ³ã§è¡ãå¯èœæ§ãé«ãããšã®1ã€ã§ãã
ããªãçµéšè±å¯ãªNUnitãŠãŒã¶ãŒã®å€ããããã¹ãŠã®ãã¹ãã±ãŒã¹ã§åãã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠããããšã«æ°ä»ããŠããªãããšã«é©ããŠããŸãã NUnitãæåã«ç»å Žãããšãã¯ãJUnitãšã®æãããªéãã§ãã£ããããããåºãç¥ãããŠããŸããã ä»ã§ã¯ããã¯ãã¹ãŠå¿ããããŠãããæ°ãã人ã ã¯NUnitãäžèŽããªãããšãæåŸ ããŠNUnitã«ãã£ãŠæ¥ãŸãã èããã¹ãããšã
ã ãã..ããã¯æã«å ¥ããããã§ããïŒ ãããšããŸã èšèšæ®µéã§ããïŒ
çŸåšã.NETã§ã¯ãTestContextã䜿çšããªãXUnitãŸãã¯å®åçãªäžŠåãã¹ãã䜿çšããNUnitã®ããããã䜿çšããŠããŸãã
ãã®æ©èœã¯åãå ¥ããããéåžžã®åªå 床ãå²ãåœãŠãããŸãã 誰ãããã«å²ãåœãŠãããŠãããããã€ã«ã¹ããŒã³ã«ãªã¹ããããŠããŸããã ã€ãŸãã誰ããããã«åãçµã¿ãããšæ±ºããå¿ èŠããããšããããšã§ãã ããã¯ã³ããã¿ãŒãŸãã¯å¯çš¿è ã§ããå¯èœæ§ããããŸãã
ç§ãã¡ã¯éåžžãèšèšæ®µéãè¡ããŸãã-å¿ èŠã«å¿ããŠãèšèšã©ãã«ãé©çšãããŸã-ããããããã§ãã£ãŠãããããå®è£ ããæ¹æ³ãç¹ã«ãããã©ã®ããã«èŠãããã説æããã³ã¡ã³ããæçš¿ããããšããå§ãããŸããŠãŒã¶ãŒã ãããã³ãŒãã£ã³ã°ããããšããå§ããå Žåããšã«ããèšèšã®è°è«ã«çµããå¯èœæ§ãããã®ã§ãæåã«ãããä¹ãè¶ããã®ãããããæåã§ãã
ããã§ãããªãã¯ããã«åãçµã¿ããã§ããïŒ
確ãã«ãç§ã¯ã¡ããã©ã§åãå§ããŸãã
https://github.com/avilv/nunit/tree/instance-per-test
ãã®ã³ãŒãããŒã¹ã¯åããŠãªã®ã§ãã§ããéãå
ã®ã³ãŒãã¹ã¿ã€ã«ã«åºå·ããããšããŠããŸã
ãããŸã§ã®ãšããã InstancePerTestCaseå±æ§ãå°å
¥ããã¢ã»ã³ããªããã³ã¯ã©ã¹ã¬ãã«ã§ãµããŒãããããšãèšç»ããŠããŸãã
ããã§åºå°ããé¢ããŠãããã©ããæããŠãã ãã
ååã®ã³ãããã§ãããã€ãã®å®è£ ã®è©³çŽ°ã«ã€ããŠã³ã¡ã³ããè¿œå ããŸããã
ãã¶ã€ã³ã«é¢ããŠã¯ã IApplyToContext
ãã掟çããå±æ§ã¯çã«ããªã£ãŠãããšæããŸãã ç§ã¯InstancePerTestCaseããããã£ãšäžè¬çãªãã®ã奜ããšæããŸã
C#
[FixtureLifeCycle(LifeCycle.InstancePerTestCase]
ããã«ãããã¢ã»ã³ããªã¬ãã«ã§èšå®ããåã ã®ãã£ã¯ã¹ãã£ã§ãªã»ããããããšãã§ããŸãã
CharliePooleããªãã¯å€ãããŸãããã£ãŒãããã¯ãšå©ãã«æè¬ããŸã
ç§ã¯ç©äºãã©ã®ããã«æ§ç¯ãããŠããã/äœãäœãããŠããã®ããªã©ããã£ãããšããã確å®ã«ç解ããŠãããšæããŸã
ãããã©ã€ããµã€ã¯ã«åæåã®ç§ã®ææ¡ã§ãïŒç§ãããªãã®ææ¡ã§ç§ã®ãã©ã³ããæŽæ°ããŸããïŒ
/// <summary>
/// Specifies the lifecycle for a fixture.
/// </summary>
public enum LifeCycle
{
/// <summary>
/// A single instance is created and for all test cases.
/// </summary>
SingleInstance,
/// <summary>
/// A new instance is created for each test case for fixtures that are marked with <see cref="ParallelizableAttribute"/>.
/// </summary>
InstancePerTestCaseForParallelFixtures,
/// <summary>
/// A new instance is created for each test case.
/// </summary>
InstancePerTestCase
}
@ jnm2ãã®ã¢ãããŒãã«ã€ããŠã©ãæããŸããïŒInstancePerTestCaseForParallelFixtures
ã«ã€ããŠã¯å°ãäžç¢ºãã§ãããããã¯æåã®å®è£
ã«ã¯å°ãå€ããããããããŸããã ãã€ãã®ããã«ãäžåºŠå®è£
ããããšãç§ãã¡ã¯ããã«åºå·ããŸãã
䞊ååŠçãšã®çµã³ã€ãã__do__åãå ¥ããå Žåãå±æ§ããŒã¹ã§ã¯ãªããã³ã³ããã¹ãããŒã¹ã§ããå¿ èŠããããŸãã ã€ãŸããä»»æã®ãã¹ãã䞊è¡ããŠå®è¡ã§ããããã `InstancePerTestCaseWhenCasesAreParallelã«äŒŒãŠããŸãã 䞊åãã£ã¯ã¹ãã£ã¯ããã®æ©èœãç¹ã«å¿ èŠãšããŸããã ãããŠå€åããã¯ãŠãŒã¶ãŒã«æ±ºå®ãä»»ããã»ããããã§ãããã
ãŸãã䞊ååŠçãšçµã¿åãããŠã¯ãªããªãããšã«ãåæããŸãã 䞊ååŠçããã®æ©èœãè¿œå ããçç±ã§ãããããã®æ©èœãæçšã§ããããšã«åæããããç§ã®æèŠã§ã¯ãã³ãŒãã«åæ ãããã¹ãã§ã¯ãããŸããã
åæããŸããNUnitã®çŸåšã®ããã©ã«ãã¢ãã«ãããªããåãã®ã§ã䞊åã·ããªãªã§ã®ã¿äœ¿çšãããŠãŒã¹ã±ãŒã¹ãç解ããŠããŸããããããå°æ¥ã®ããã©ã«ãã®ã©ã€ããµã€ã¯ã«ã«ãªãããšãé¡ã£ãŠããŸãïŒnunit 4ïŒïŒæåãããã®ããã§ãã
ãããããSingleInsance / InstancePerTestCaseã®ãŸãŸã«ããŠããå¿ èŠããããŸã
ãã1ã€ã®è³ªåã¯ãããã§IDisposableãã¿ãŒã³ãåŠçããå¿ èŠããããã©ããã§ããããã«ãããSetUp / TearDownãåé·ã«ãªããŸãããXUnitã¹ã¿ã€ã«ã®æ¹ãã¯ããã«èªç¶ã«æããããŸãã
IDisposableãå®è£ ãããã¹ããã£ã¯ã¹ãã£ã¯ãã§ã«å»æ£ããŠããŸãã ããªãã¯ãããæ©èœãç¶ããããšã確èªããå¿ èŠããããŸãã
çŽ æŽããããããŸãã
ããããä»æ¥ãããã¹ãã±ãŒã¹ã®è¿œå ãéå§ããŸããããã®ãããªã³ã¢ã¡ã«ããºã ã§ãããããInstancePerTestCaseããªã³ã®ãšãã«åãããšãæ©èœããããšã確èªããã±ãŒã¹ãããªãè¿œå ãããå¯èœæ§ããããŸããééã£ãŠããå Žåã¯ãä¿®æ£ããŠãã ããã
DisposeFixtureCommandã¯ãDisposeã®åŒã³åºããåŠçããŸãã
IMOã®äž»ãªåé¡ã¯ããã¹ããã£ã¯ã¹ãã£ã®ã³ãã³ãã¹ããªãŒã å šäœã__ãã¹ãããšã«__åŒã³åºãããããã«ããããšã§ãã ç§ããããŸã§ã«èŠãå€æŽã¯ãä»äºãããŠããããã«èŠããã³ãã³ãã¹ããªãŒã ãæ£ããäœæããŸãããéèŠãªåé¡ã¯ããã¹ãã±ãŒã¹ããšã«ç¢ºå®ã«åŒã³åºãããããã«ããæ¹æ³ã§ãã ïŒãã£ã¯ã¹ãã£ã®ã³ãã³ãæ§é ã¯ãã¹ãã±ãŒã¹ã®ã³ãã³ãæ§é ãšã¯ç°ãªãããšã«æ³šæããŠãã ãããïŒcompositeworkitemã¯ã³ã³ããã¹ãã«ææã§ãããã³ãã³ããæ£ããåŒã³åºãå¿ èŠããããšæããŸãïŒãããŸã§ã®ããã«ïŒãããã£ã³ã¹ãåŸããããã©ããã¯ããããŸãã__every__ãã¹ãã±ãŒã¹ã«å¯ŸããŠããããŸãã ïŒç§ã¯ã³ãŒããèªãã§ããã ããªã®ã§ãééã£ãŠããå¯èœæ§ããããŸããïŒ
@CharliePooleã¯ããªããæ£ããããã«èŠããŸããç§ã¯ãã¹ãã¡ãœãããæ£ç¢ºã«å®è¡ãããã®ã«ã€ããŠå°ãã°ã©ããäœæããŸããïŒ
çŸåšãRunChildrenã«ãŒãã§ãã¹ããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãäœæããŠããŸãããä»ã«èŠéããã©ãããŒãããå Žåã誰ããæ°ããã©ãããŒãå¿
èŠãšããŠããå Žåã¯èšããŸã§ããªããRetry / Repeatã³ãã³ãã«ã¯ååã§ã¯ãããŸããã
TestMethodCommandã«ã¯ããã«è¿ãå¿
èŠããããŸã
ææ°ã®å€æŽãæŽæ°ããŸãã
https://github.com/avilv/nunit/tree/instance-per-test-2
InstancePerTestCaseWhenCasesAreParallelãåé€ããŸãã
SimpleWorkItemã§MakeTestCommandå
éšã³ã³ã¹ãã©ã¯ã/å»æ£åºå®å
·ãæ·»å ããCompositeWorkItem MakeOneTimeSetUpCommandã§ãããã¹ãããä»ãFixtureLifeCycleãå®è£
ããã¯ããŸãæ©èœããŠããããã§ããã¬ãŒã ã¯ãŒã¯ãã©ã®ããã«æ§ç¯ãããŠããããããçã«ããªã£ãŠããŸã
ä»ãç§ã¯ãã¹ãŠãæ£ããæ©èœããŠããããšã確èªããããã«ããããã®ãŠããããã¹ããè¿œå ããå¿
èŠããããŸã
次ã®ããŒãžã§ã³ã®åã«ãããã¬ãã¥ãŒãããå¯èœæ§ã¯ãããŸããïŒ ãã¡ãããæ¹å/å€æŽã®ããã«ãŸã æºåäžã§ã
ãã®ã¢ãããŒãã¯ç§ã«ã¯è¯ããšæããŸãããããã§ããã°ã次ã®ãªãªãŒã¹ã§äœ¿çšããããšæããŸãã
ãããã¬ãã¥ãŒããŠããããã£ã³ã¹ã¯ãããŸããïŒ æ¬åœã«è¿ã¥ããŠãããããªæ°ãããŸã
ãã®æ©èœã«äœãåãããã£ããã©ããç¥ãããã§ããïŒ @avilvãããªãè¿ã¥ããããã§ãã é·ãéãã®ãããªæ©èœãæåŸ ããŠããŠãããã䜿ãããšã«è奮ããŠããŸãïŒ
çããããããšãïŒ
ãã®æ©èœã¯çŸåšæ©èœããŠããŸããïŒ
@CharliePoole @avilvã®ææ°ããŒãžã§ã³ã確èªããŠ
@janissimsonsç³ãèš³ãããŸããããç§ã¯ãããã®ãããžã§ã¯ãã«åå ããŠããªãã®ã§ãç§ã®ã¬ãã¥ãŒã¯ãããåé²ãããŸããã @ nunit-framework-team誰ãããããã¬ãã¥ãŒã§ããŸãããïŒ
ïŒ 3427ãããŒãžããããã«è¡ããããã¹ãŠã®äœæ¥ã«æè¬ããŸãã
æ°ããæ©èœãã©ã®ããã«äœ¿çšããŸããïŒ èª°ããæ°ããå±æ§ãšããããé©åã«äœ¿çšããæ¹æ³ã«ã€ããŠç°¡åãªèª¬æãæžãããšãã§ããŸããïŒ
ä»åŸæ°é±éã§ãªãªãŒã¹ããäºå®ã§ãã ãŸã§åŸ ã¡ããã£ãã NET 5ã¯æçµçã§ããããªãªãŒã¹åã«NET5ã§å°ãæçµãã¹ããè¡ããŸãã äœãåé¡ã¯ãªããšæããŸãããè¿ãããŠåŸ ã€ã»ãããããšæããŸããã
@rprouseæ°ããããŒãžã§ã³ããªãªãŒã¹ããäºå®ã®èŠç©ããã¯ãããŸããïŒ ãã®æ©èœã䜿ãå§ãããã®ã§ããã
@janissimsonsããã«ã .NET 5.0ãã«ãã«é¢ããããã€ãã®åé¡ãšä»ã®ããã€ãã®åé¡ã解決ããŠããã®ã§ããªãªãŒã¹ããŸãã ãã®ãããžã§ã¯ãããŒãã§ã¹ããŒã¿ã¹ã远跡ã§ããŸãã
ããã¯çŽ æŽããããã¥ãŒã¹ã§ãïŒ
ããã«ãããNUnitã§æ¬¡ã®ããšãå¯èœã«ãªãããšãæ£ããç解ããŠããŸããïŒ
ããããã¹ãŠãçµã¿åãããïŒ
ããã§éå»ã«ããã€ãã®ããšãè©ŠããŸããhttps://github.com/jawn/dotnet-parallel-parameterized-tests
æ°ãããªãªãŒã¹ã¯ã.NET Full Framework 4.7.2ãŸãã¯å°ãªããšã4.8ãšåŒãç¶ãäºææ§ããããŸããïŒ
ãããããé¡ãããŸãã
DR
@jawnã¯ãããã¹ãŠ
@drauchã¯ãã3.13ãªãªãŒã¹ã¯åŒãç¶ã
@avilvãç²ãæ§ã§ãã!!
ã¡ãªã¿ã«ãã©ã®ããŒã«ã䜿çšããŠããã®çŽ æŽããããããŒå³ãäœæããŸãããïŒ
ããããšã
@rprouseãã®æ°æ©èœã®äœ¿çšæ¹æ³ã«é¢ããããã¥ã¡ã³ããæŽæ°ããŠ
@janissimsonsãªãªãŒã¹ã®ããã¥ã¡ã³ããæŽæ°ããäºå®ã§ãã ãã ããçãããŒãžã§ã³ã§ã¯ããããã[Parallelizable(ParallelScope.All)]
ãšãšãã«[FixtureLifeCycle(LifeCycle.InstancePerTestCase)]
ããã¹ãã¯ã©ã¹ã«è¿œå ãããšãã¯ã©ã¹å
ã§å®è¡ããããã¹ãããšã«ãã¹ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãã€ã³ã¹ã¿ã³ã¹åãããŸãã ããã«ãããä»ã®ãã¹ãã§å€æ°ãå€æŽãããããšãå¿é
ããã«ãã¯ã©ã¹å
ã®ã¡ã³ããŒå€æ°ã䞊åãã¹ãå®è¡ã§äœ¿çšã§ããããã«ãªããŸãã
@LirazShayã¹ã¯ãªãŒã³ã·ã§ããã®å³ã¯ãVisual https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutionsReSharperã«ãåæ§ã®æ©èœããããŸãã
@ jnm2ã©ããããããšã!!!
ç§ã¯VSãšã³ã¿ãŒãã©ã€ãºãæã£ãŠããŸãããéåžžã«åœ¹ç«ã€ãã®æ©èœã«ã€ããŠç¥ããŸããã§ãã
ãã³ãããããšãããããŸã
ããããªãªãŒã¹ããã3.13ãªãªãŒã¹ã®äžéšã§ããããšã¯æ£ããã§ããïŒ
ããããªãªãŒã¹ããã3.13ãªãªãŒã¹ã®äžéšã§ããããšã¯æ£ããã§ããïŒ
ç¹ã«ïŒ3720ã®ã¢ã»ã³ããªã¬ãã«ã®å±æ§ã¢ããªã±ãŒã·ã§ã³ã«é¢ããŠãããã€ãã®åé¡ã芳å¯ããã³ä¿®æ£ããããšæããŸããçŸåšã3.13.1ãåŸ ã£ãŠããŸãã
NUnit3.13.1ããªãªãŒã¹ãããŸããã
ãã以äžã®åé¡ã¯æ®ã£ãŠããŸããïŒ
ãããããããééãããçç±ã§ã@andrewlaser
æãåèã«ãªãã³ã¡ã³ã
ãããã¬ãã¥ãŒããŠããããã£ã³ã¹ã¯ãããŸããïŒ æ¬åœã«è¿ã¥ããŠãããããªæ°ãããŸã