AutoFixtureã«ãã³ã³ã¹ãã©ã¯ã¿ãŒã§éèŠãªå¶çŽãæã€ãªããžã§ã¯ããçæãããããã®æè¯ã®æ¹æ³ãèŠã€ããããšããŠããŸãã ããšãã°ãintãåããçŽ æ°ã®ã¿ãåãå ¥ããPrimeNumberããŒã¿æ§é ã䜿çšãããšããŸãã
AutoFixtureã§ãã®çš®ã®æ§é ã®ã€ã³ã¹ã¿ã³ã¹ãçæããããã®æè¯ã®ã¢ãããŒãã¯äœã§ããããïŒ ã€ãŸããç§ã¯æããã«ã«ã¹ã¿ãã€ãºãäœæããŸãããããã«äœãå ¥ããŸããïŒ
ããã«ãçè«çã«ã¯åå¥ã«ã©ã³ãã ã«ããããšãã§ããããã€ãã®åŒæ°ãåããã®ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããšããŠãããšããŸãããããããã¯ãããã®éã§ããã€ãã®æ€èšŒãè¡ããŸãïŒããšãã°ãargAã¯argBã®å Žåã«ã®ã¿ãã®å€ã®ç¯å²ã«å ¥ãããšãã§ããŸãã¯trueã§ãããargCã¯argAå€ã«å¿ããŠç°ãªãæ€èšŒã«ãŒã«ã«æºæ ããå¿ èŠããããŸããããã§ãªãå ŽåãargC.Xããããã£ã¯argA.Xããããã£ãšäžèŽããå¿ èŠããããŸãã
ãã®å Žåãããªãã¯ã©ãããŸããïŒ
ãããŠæåŸã«ïŒç§ã¯ããã€ãã®åé¡ãäœæããããšãã§ããŸãããããããã®äž»é¡ã¯ãã¹ãŠåãåé¡ã®ç°ãªãåŽé¢ã§ãããšæããŸããïŒãæ°ããã¯ã©ã¹ãè¿œå ãããã³ã«ãã®çš®ã®ã«ã¹ã¿ãã€ãºãäœæããŠé©çšããå¿ èŠãããããããã®ã«ã¹ã¿ãã€ãºãåžžã«ç¶æããå¿ èŠããããŸãæ€èšŒã«ãŒã«ã®å€æŽã¯å€§å€ãªäœæ¥ã®ããã«æãããŸãããããã軜æžããããã«ããã€ãã®ææ³ãé©çšããŠããŸããïŒ
ã©ããããããšãããããŸãããé·ãéç³ãèš³ãããŸããã§ãããæçš¿ãä¹±éã«ãªããªãããã«é¡ã£ãŠããŸãã
ç¡ç·å°æ¢ã§ããããªããã ç§ãã¡ã¯çããŠããŸãããããŠç§ã¯ããã«è¿äºãããŸã-æè¿ç§ã®äž»èŠãªä»äºã§éåžžã«å¿ããã§ãã NSubstitute v4ãªãªãŒã¹ã«ãåãçµãã§ãããããæéã¯éåžžã«éãããŠããŸãããªãœãŒã¹ïŒç©æãã«ãµããïŒè³ªåã¯é£ããã®ã§ãåçãæçš¿ããåã«ãèãããããã¹ãŠã®æ¹æ³ã«ã€ããŠèããŠãã ããã
å¿èãããããšããã楜ãã¿ã«ïŒãŠã£ã³ã¯ïŒ
ããã
ãã®ãã¥ãŒã¹ã¯ãããŸããïŒ
ãã¬ãã·ã£ãŒã¯ãããŸããïŒç§ã¯ããªã«ãç¥ã£ãŠããŸãðããããŠããã¯å®éã«ã¯ãããã¯ãããŠããŸãããç§ã¯ããã€ãã®ç¥èã«åºã¥ããã¢ããã€ã¹ãæ¬åœã«æ¬²ããã§ãïŒãããã¯ããªããããçšåºŠã®å¯èŠæ§ãæã£ãŠãããã©ãããç¥ãããšã ãã§ãã
ã©ããããããšãïŒ
è¯ãäžæ¥ïŒ æåŸã«ãç§ã¯çããããã«å°ãã¿ã€ããå²ãåœãŠãŸãã-éåžžã«é ããè¿ä¿¡ããè©«ã³ããŸãð
ãŸããAutoFixtureã®ã³ã¢ã¯éåžžã«åçŽã§ãããå¶çŽã®ããè€éãªããªãŒã®ãµããŒããçµã¿èŸŒãŸããŠããªãããšã«æ³šæããŠãã ããã èŠããã«ãäœææŠç¥ã¯æ¬¡ã®ãããªãã®ã§ãã
çŸåšã®ã¢ãããŒãã§ã¯ã以åã«çºèŠããããã«ãã©ããããããäŸåé¢ä¿ã®å¶çŽãå¶åŸ¡ããããšã¯ã§ããŸããã
ç¹å®ã®ã¿ã€ããæ§ç¯ããæ¹æ³ãæå®ããããã®ã«ã¹ã¿ãã€ãºãã€ã³ããããã€ããããŸããããããã¯æ¯èŒçåçŽã§ããããããã®è€éãªã«ãŒã«ããµããŒãããŠããŸããã
AutoFixtureã§ãã®çš®ã®æ§é ã®ã€ã³ã¹ã¿ã³ã¹ãçæããããã®æè¯ã®ã¢ãããŒãã¯äœã§ããããïŒ ã€ãŸããç§ã¯æããã«ã«ã¹ã¿ãã€ãºãäœæããŸãããããã«äœãå ¥ããŸããïŒ
ã©ã³ãã ãªintãçæãããã®ãã¡ã®1ã€ãçŽ æ°ã«ãªããŸã§ã«ãŒãããŸããïŒãŸãã¯ãã¡ããçŽ æ°çæã¢ã«ãŽãªãºã ãå®è¡ããŸããïŒïŒ ããã¯ãã®çš®ã®å¶çŽã«ã¯åãå ¥ããããå¯èœæ§ããããŸãããå¶çŽãéµå®ããã®ãããé£ããå Žåãããã¯ããã«ã³ã¹ãããããããšã«ãªããŸãã
ããã€ãã®èš±å®¹å¯èœãªå€ã®æéãªã¹ããæäŸããŸããïŒ
æ®å¿µãªãããããã«ã¯ç¹å¹è¬ã¯ãããŸãããã¢ãããŒãã¯ç¶æ³ã«ãã£ãŠç°ãªããŸãã å€ãã©ã³ãã ãããããšã«äŸåããªãå ŽåããŸãã¯åäžã®SUTã1ã2ã®çŽ æ°ããæ¶è²»ããªãå Žåã¯ãçŽ æ°ãããŒãã³ãŒãã£ã³ã°ããŠãããããéžæããã®ãé©åãªå ŽåããããŸãïŒ ElementsBulider<>
çµã¿èŸŒã¿ãã«ããŒããããŸãïŒãã®ãããªå ŽåïŒã äžæ¹ãçŽ æ°ã®å€§èŠæš¡ãªãªã¹ããå¿
èŠã§ãé·ãçŽ æ°ã·ãŒã±ã³ã¹ãæäœããå Žåã¯ãããããåçã«çæããã¢ã«ãŽãªãºã ãã³ãŒãã£ã³ã°ããããšããå§ãããŸãã
ããã«ãçè«çã«ã¯åå¥ã«ã©ã³ãã ã«ããããšãã§ããããã€ãã®åŒæ°ãåããã®ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããšããŠãããšããŸãããããããã¯ãããã®éã§ããã€ãã®æ€èšŒãè¡ããŸãïŒããšãã°ãargAã¯argBã®å Žåã«ã®ã¿ãã®å€ã®ç¯å²ã«å ¥ãããšãã§ããŸãã¯trueã§ãããargCã¯argAå€ã«å¿ããŠç°ãªãæ€èšŒã«ãŒã«ã«æºæ ããå¿ èŠããããŸããããã§ãªãå ŽåãargC.Xããããã£ã¯argA.Xããããã£ãšäžèŽããå¿ èŠããããŸãã
ãã®å Žåãããªãã¯ã©ãããŸããïŒ
æ¬åœã«è¯ã質åã§ãããæ®å¿µãªããAutoFixtureã§ã¯ç®±ããåºããŠããã«ãããããŸã解決ããããšã¯ã§ããŸããã éåžžãç§ã¯ã¿ã€ãããšã«ã«ã¹ã¿ãã€ãºãåé¢ããããšããŠããã®ã§ã1ã€ã®ã¿ã€ãã®ã«ã¹ã¿ãã€ãºã¯ãåäžã®ã¿ã€ãã®äœæã®ã¿ãå¶åŸ¡ããŸãã ããããç§ã®å Žåãã¿ã€ãã¯ç¬ç«ããŠãããæããã«ããªãã®ã±ãŒã¹ã§ã¯ããŸãæ©èœããŸããã ãŸããAutoFixtureã¯ããã«äœ¿çšã§ããã³ã³ããã¹ããæäŸããªããããç¹å®ã®ã¿ã€ãã®ã«ã¹ã¿ãã€ãºãäœæããå Žåãã§ãªããžã§ã¯ãïŒå éšçã«ã¯æšæ¬ãšåŒã°ããïŒãäœæããŠããã³ã³ããã¹ããæ確ã«ç解ããããšã¯ã§ããŸããã
ç§ã®é ã®äžã«ãç§ã¯éåžžã次ã®æŠç¥ããå§ããããšæããŸãïŒ
ãã®ããã«ããŠãå éšã¢ãŒããã¯ãã£ãšããŸãççŸããªãããã«ãããããã©ã®ããã«æ©èœããããæ確ã«ãªããŸãã ãã¡ããããã®æ¹æ³ã¯éåžžã«åé·ã«ãªãå¯èœæ§ããããŸãã
è€éãªå¶çŽã®ããã±ãŒã¹ãããã»ã©äžè¬çã§ãªãå Žåã¯ãæ¢åã®æ©èœã§ååãªå ŽåããããŸãã ãããããã¡ã€ã³ã¢ãã«ããã®ãããªã±ãŒã¹ã§æ¬åœã«ãã£ã±ãã§ããå ŽåãççŽã«èšã£ãŠAutoFixtureã¯ããªãã«ãšã£ãŠæè¯ã®ããŒã«ã§ã¯ãªããããããŸããã ããããããã®ãããªåé¡ãæããšã¬ã¬ã³ããªæ¹æ³ã§è§£æ±ºã§ãããããåªããããŒã«ãåžå Žã«åºåã£ãŠããŸãã ãã¡ãããAutoFixtureã¯éåžžã«æè»æ§ããããã»ãšãã©ãã¹ãŠããªãŒããŒã©ã€ãã§ãããããAutoFixtureã³ã¢ã®äžã«ãã€ã§ãç¬èªã®DSLãäœæã§ããŸã...ãã ããã©ã¡ãã®æ¹æ³ãå®äŸ¡ããè©äŸ¡ããå¿ èŠããããŸãð
@ploehã«ã圌ã®èããèããŠã¿ãŸãããã éåžžãããŒã¯ã®çãã¯æ·±ããçµæã解決ããã®ã§ã¯ãªããæåã«æ ¹æ¬çãªåå ãèŠã€ããããšããŸãð
ä»ã«ãäžæãªç¹ãããããŸãããããåãåãããã ããã ãã€ã§ããçãããããŸãã
PS FWIWãç§ã¯ããªãã«ãµã³ãã«ãæäŸããããšã«æ±ºããŸãããããã§ç§ã¯AutoFixtureã§éãã§ãåæ§ã®åé¡ã解決ããããšããŸããïŒç§ã¯ãããåçŽã«ä¿ãšããšããŸããããããŠããªãã®å Žåããã¯å®å
šã«æ©èœããªããããããŸããïŒïŒã¯ãªãã¯ããŠãœãŒã¹ã³ãŒãã衚瀺
`` `cïŒ
ã·ã¹ãã ã䜿çšãã;
AutoFixtureã䜿çšããŸãã
AutoFixture.Xunit2ã䜿çšããŸãã
Xunitã䜿çšãã;
åå空éAutoFixturePlayground
{{
ãããªãã¯éçã¯ã©ã¹Util
{{
public static bool IsPrimeïŒint numberïŒ
{{
//ããã³ããŒhttps://stackoverflow.com/a/15743238/2009373
if (number <= 1) return false;
if (number == 2) return true;
if (number % 2 == 0) return false;
var boundary = (int) Math.Floor(Math.Sqrt(number));
for (int i = 3; i <= boundary; i += 2)
{
if (number % i == 0) return false;
}
return true;
}
}
public class DepA
{
public int Value { get; set; }
}
public class DepB
{
public int PrimeNumber { get; }
public int AnyOtherValue { get; }
public DepB(int primeNumber, int anyOtherValue)
{
if (!Util.IsPrime(primeNumber))
throw new ArgumentOutOfRangeException(nameof(primeNumber), primeNumber, "Number is not prime.");
PrimeNumber = primeNumber;
AnyOtherValue = anyOtherValue;
}
}
public class DepC
{
public DepA DepA { get; }
public DepB DepB { get; }
public DepC(DepA depA, DepB depB)
{
if (depB.PrimeNumber < depA.Value)
throw new ArgumentException("Second should be larger than first.");
DepA = depA;
DepB = depB;
}
public int GetPrimeNumber() => DepB.PrimeNumber;
}
public class Issue1067
{
[Theory, CustomAutoData]
public void ShouldReturnPrimeNumberFromDepB(DepC sut)
{
var result = sut.GetPrimeNumber();
Assert.Equal(sut.DepB.PrimeNumber, result);
}
}
public class CustomAutoData : AutoDataAttribute
{
public CustomAutoData() : base(() =>
{
var fixture = new Fixture();
// Add prime numbers generator, returning numbers from the predefined list
fixture.Customizations.Add(new ElementsBuilder<PrimeNumber>(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41));
// Customize DepB to pass prime numbers only to ctor
fixture.Customize<DepB>(c => c.FromFactory((PrimeNumber pn, int anyNumber) => new DepB(pn, anyNumber)));
// Customize DepC, so that depA.Value is always less than depB.PrimeNumber
fixture.Customize<DepC>(c => c.FromFactory((DepA depA, DepB depB, byte diff) =>
{
depA.Value = depB.PrimeNumber - diff;
return new DepC(depA, depB);
}));
return fixture;
})
{
}
}
/// <summary>
/// A helper type to represent a prime number, so that you can resolve prime numbers
/// </summary>
public readonly struct PrimeNumber
{
public int Value { get; }
public PrimeNumber(int value)
{
Value = value;
}
public static implicit operator int(PrimeNumber prime) => prime.Value;
public static implicit operator PrimeNumber(int value) => new PrimeNumber(value);
}
}
`` `
ããã«ã¡ã¯@zvirja
ãããŒã詳现ãªçããããããšããããã¯æ¬åœã«é¢çœãã§ãã ç§ã¯ããã€ãã®ãã¹ããè¡ãããããäœããã䟡å€ãããããèŠç©ããå¿ èŠããããŸãããå šäœãšããŠããã¯çŽ æŽãããããšã§ãã
åŠçããäŸåé¢ä¿ãããã»ã©å€ããªããšæãã®ã§ãããªãã®ã¢ãããŒããè¯ãæ¹æ³ãããããŸããã ãã¡ããã @ ploehã«è¿œå ãããã®ãããã°ãå æ ã«æããŸãð
ããäžåºŠããããšããè¯ãä»äºãç¶ããŠãã ããïŒ
AutoFixtureãšããããã£ããŒã¹ã®ãã¹ãã®äž¡æ¹ã§ã®ç§ã®çµéšã§ã¯ã次ã®ãããªåé¡ã«å¯ŸåŠããã«ã¯ãåºæ¬çã«2ã€ã®æ¹æ³ããããŸãã
ïŒç§ãæžããŠããããã«ãç§ã®çŽæã¯ããããããããã_catamorphisms_ãš_anamorphisms_ã§ããå¯èœæ§ãããããšã瀺åããŠããŸãããããã«ã€ããŠããå°ãèããå¿ èŠãããã®ã§ãããã¯ããŠãããã»ãšãã©ç§èªèº«ãžã®ã¡ã¢ã§ããïŒ
ã©ã³ãã ã«çæãããå€ã®ã»ãšãã©ããé©åããªããã°ãªããªãå¶çŽã«é©åããå Žåã¯ãæ¢åã®ãžã§ãã¬ãŒã¿ãŒã䜿çšããŸãããææäžé©åãªå€ãç Žæ£ããããšããåé¡ã«å¯ŸåŠããæãç°¡åãªæ¹æ³ã§ããå¯èœæ§ããããŸãã
äžæ¹ããã£ã«ã¿ãŒãã»ãšãã©ã®ã©ã³ãã ããŒã¿ãç Žæ£ããããšãæå³ããå Žåã¯ã代ããã«ãããããã©ã³ãã ã·ãŒãå€ã«åºã¥ããŠãåé¡ã®å¶çŽã«é©åããå€ãçæããã¢ã«ãŽãªãºã ãèãåºãå¿ èŠããããŸãã
æ°å¹Žåãç§ã¯FsCheckã®ã³ã³ããã¹ãã§äž¡æ¹ã®ã¢ãããŒãã®ããã€ãã®ç°¡åãªäŸã瀺ãè¬æŒãããŸããã ãã®ãã¬ãŒã³ããŒã·ã§ã³ã¯ãå®éã«ã¯åãã¢ãããŒããæ¡çšããããŒã¯ã®é²å圢ã§ããã代ããã«AutoFixtureã䜿çšããŠããŸãã æ®å¿µãªããããã®è©±ã®é²é³ã¯ãããŸããã
äž¡æ¹ã®æ¹æ³ã§çŽ æ°ã®èŠä»¶ã«å¯ŸåŠã§ããŸãã
ãã£ã«ã¿ã®ã¢ãããŒãã¯ãå¶çŽã®ãªãæ°ãçæããå®éã«çŽ æ°ã«ãªããŸã§æ°ãç Žæ£ããããšã§ãã
ã¢ã«ãŽãªãºã ã®ã¢ãããŒãã¯ãçŽ æ°ãçæããããã«çŽ æ°ãµããã®ãããªã¢ã«ãŽãªãºã ã䜿çšããããšã§ãã ãã ããããã¯ã©ã³ãã ã§ã¯ãªããããã©ã³ãã åããæ¹æ³ãç解ããããšããå§ãããŸãã
AutoFixtureã§å¶çŽãããå€ãåŠçããæ¹æ³ã«é¢ããå šäœçãªè³ªåã¯ãä»ã®äººãã©ã€ãã©ãªãèŠå§ãããšããã«åºãŠããŸãããåœæãç§ã¯ãŸã åç §ããŠããèšäºãæžããŸããïŒ http ïŒ
çžäºã«é¢é£ããè€æ°ã®å€ã®è³ªåã«é¢ããŠãç§ã¯äžè¬çãªã¬ã€ãã³ã¹ãäžããããããŸããã ãã®çš®ã®è³ªåã¯ãå€ãã®å ŽåXYåé¡ã§ãã å€ãã®å Žåã詳现ãç解ããã°ã代æ¿èšèšã«ãã£ãŠAutoFixtureã ãã§ãªãã補åã³ãŒãããŒã¹èªäœã®åé¡ã解決ã§ããå¯èœæ§ããããŸãã
XYåé¡ãååšããå Žåã§ãããããæ£åœãªæžå¿µäºé ãšãªãå¯èœæ§ãããç¶æ³ã¯ãŸã ãããŸãããç§ã®çµéšã§ã¯ããããã¯ã±ãŒã¹ãã€ã±ãŒã¹ã§å¯ŸåŠããããšæããŸããã¬ã¢ã
ã§ããããå ·äœçãªäŸãããã°ã圹ã«ç«ãŠãã°ãšæããŸãããäžè¬çãªè³ªåã«ææ矩ã«çãããããšã¯æããŸããã
@ploehãã®åçã«æè¬ããŸããããã¯ãç§ãæ€èšããŠããã¢ãããŒããè£ä»ãããã®ã§ãïŒãããŠãã«ã¿ã¢ã«ãã£ãºã ãšã¢ãã¢ã«ãã£ãºã ã«èå³ãæã£ãŠãããŸããðïŒã
ç§ã¯çžäºäŸåå€ãã»ãšãã©XYåé¡ã§ããããšã«å®å
šã«åæããŸãïŒå°ãªããšãç§ã®å ŽåïŒãåé¡ã¯ãã¬ã¬ã·ãŒïŒãã¹ããããŠããªãð¢ïŒã³ãŒãã§äœæ¥ãããšãããããã®å€ãæ±ãããšã¯ãç§ãã¡ãåŸããŸã§ããšã«ããããã€ãã®ãã¹ããæžãããã®è¯ãã¹ã¿ãŒãã ã£ããšããããšã§ããããé©åã«ãªãã¡ã¯ã¿ãªã³ã°ããæéã
ãšã«ãããããªãã®çãã¯äž¡æ¹ãšãåé¡ã«éåžžã«ããŸã察åŠããŠããŸããç§ã¯ããããè¡ãã®ã¯è¯ãããšã ãšæããŸãã
ããããšãïŒ
ãšããã§ãç§ã¯@zvirjaãžã®è¿œå ãšããŠç§ã®çããæå³ããã ãã ãšèšãã®ãå¿ããŸããã ããã¯ãã§ã«ããã«è¯ãçãã§ãð
ç§ã¯ãããä»ã®æ¹æ³ã§ãšããªãã£ãð
æãåèã«ãªãã³ã¡ã³ã
è¯ãäžæ¥ïŒ æåŸã«ãç§ã¯çããããã«å°ãã¿ã€ããå²ãåœãŠãŸãã-éåžžã«é ããè¿ä¿¡ããè©«ã³ããŸãð
ãŸããAutoFixtureã®ã³ã¢ã¯éåžžã«åçŽã§ãããå¶çŽã®ããè€éãªããªãŒã®ãµããŒããçµã¿èŸŒãŸããŠããªãããšã«æ³šæããŠãã ããã èŠããã«ãäœææŠç¥ã¯æ¬¡ã®ãããªãã®ã§ãã
çŸåšã®ã¢ãããŒãã§ã¯ã以åã«çºèŠããããã«ãã©ããããããäŸåé¢ä¿ã®å¶çŽãå¶åŸ¡ããããšã¯ã§ããŸããã
ç¹å®ã®ã¿ã€ããæ§ç¯ããæ¹æ³ãæå®ããããã®ã«ã¹ã¿ãã€ãºãã€ã³ããããã€ããããŸããããããã¯æ¯èŒçåçŽã§ããããããã®è€éãªã«ãŒã«ããµããŒãããŠããŸããã
æ®å¿µãªãããããã«ã¯ç¹å¹è¬ã¯ãããŸãããã¢ãããŒãã¯ç¶æ³ã«ãã£ãŠç°ãªããŸãã å€ãã©ã³ãã ãããããšã«äŸåããªãå ŽåããŸãã¯åäžã®SUTã1ã2ã®çŽ æ°ããæ¶è²»ããªãå Žåã¯ãçŽ æ°ãããŒãã³ãŒãã£ã³ã°ããŠãããããéžæããã®ãé©åãªå ŽåããããŸãïŒ
ElementsBulider<>
çµã¿èŸŒã¿ãã«ããŒããããŸãïŒãã®ãããªå ŽåïŒã äžæ¹ãçŽ æ°ã®å€§èŠæš¡ãªãªã¹ããå¿ èŠã§ãé·ãçŽ æ°ã·ãŒã±ã³ã¹ãæäœããå Žåã¯ãããããåçã«çæããã¢ã«ãŽãªãºã ãã³ãŒãã£ã³ã°ããããšããå§ãããŸããæ¬åœã«è¯ã質åã§ãããæ®å¿µãªããAutoFixtureã§ã¯ç®±ããåºããŠããã«ãããããŸã解決ããããšã¯ã§ããŸããã éåžžãç§ã¯ã¿ã€ãããšã«ã«ã¹ã¿ãã€ãºãåé¢ããããšããŠããã®ã§ã1ã€ã®ã¿ã€ãã®ã«ã¹ã¿ãã€ãºã¯ãåäžã®ã¿ã€ãã®äœæã®ã¿ãå¶åŸ¡ããŸãã ããããç§ã®å Žåãã¿ã€ãã¯ç¬ç«ããŠãããæããã«ããªãã®ã±ãŒã¹ã§ã¯ããŸãæ©èœããŸããã ãŸããAutoFixtureã¯ããã«äœ¿çšã§ããã³ã³ããã¹ããæäŸããªããããç¹å®ã®ã¿ã€ãã®ã«ã¹ã¿ãã€ãºãäœæããå Žåãã§ãªããžã§ã¯ãïŒå éšçã«ã¯æšæ¬ãšåŒã°ããïŒãäœæããŠããã³ã³ããã¹ããæ確ã«ç解ããããšã¯ã§ããŸããã
ç§ã®é ã®äžã«ãç§ã¯éåžžã次ã®æŠç¥ããå§ããããšæããŸãïŒ
ãã®ããã«ããŠãå éšã¢ãŒããã¯ãã£ãšããŸãççŸããªãããã«ãããããã©ã®ããã«æ©èœããããæ確ã«ãªããŸãã ãã¡ããããã®æ¹æ³ã¯éåžžã«åé·ã«ãªãå¯èœæ§ããããŸãã
è€éãªå¶çŽã®ããã±ãŒã¹ãããã»ã©äžè¬çã§ãªãå Žåã¯ãæ¢åã®æ©èœã§ååãªå ŽåããããŸãã ãããããã¡ã€ã³ã¢ãã«ããã®ãããªã±ãŒã¹ã§æ¬åœã«ãã£ã±ãã§ããå ŽåãççŽã«èšã£ãŠAutoFixtureã¯ããªãã«ãšã£ãŠæè¯ã®ããŒã«ã§ã¯ãªããããããŸããã ããããããã®ãããªåé¡ãæããšã¬ã¬ã³ããªæ¹æ³ã§è§£æ±ºã§ãããããåªããããŒã«ãåžå Žã«åºåã£ãŠããŸãã ãã¡ãããAutoFixtureã¯éåžžã«æè»æ§ããããã»ãšãã©ãã¹ãŠããªãŒããŒã©ã€ãã§ãããããAutoFixtureã³ã¢ã®äžã«ãã€ã§ãç¬èªã®DSLãäœæã§ããŸã...ãã ããã©ã¡ãã®æ¹æ³ãå®äŸ¡ããè©äŸ¡ããå¿ èŠããããŸãð
@ploehã«ã圌ã®èããèããŠã¿ãŸãããã éåžžãããŒã¯ã®çãã¯æ·±ããçµæã解決ããã®ã§ã¯ãªããæåã«æ ¹æ¬çãªåå ãèŠã€ããããšããŸãð
ä»ã«ãäžæãªç¹ãããããŸãããããåãåãããã ããã ãã€ã§ããçãããããŸãã
PS FWIWãç§ã¯ããªãã«ãµã³ãã«ãæäŸããããšã«æ±ºããŸãããããã§ç§ã¯AutoFixtureã§éãã§ãåæ§ã®åé¡ã解決ããããšããŸããïŒç§ã¯ãããåçŽã«ä¿ãšããšããŸããããããŠããªãã®å Žåããã¯å®å šã«æ©èœããªããããããŸããïŒïŒ
ã¯ãªãã¯ããŠãœãŒã¹ã³ãŒãã衚瀺
`` `cïŒ
ã·ã¹ãã ã䜿çšãã;
AutoFixtureã䜿çšããŸãã
AutoFixture.Xunit2ã䜿çšããŸãã
Xunitã䜿çšãã;
åå空éAutoFixturePlayground
{{
ãããªãã¯éçã¯ã©ã¹Util
{{
public static bool IsPrimeïŒint numberïŒ
{{
//ããã³ããŒhttps://stackoverflow.com/a/15743238/2009373
}
`` `