[英]Is this a good strategy for composing arbitraries?
刚开始研究FsCheck,编写了一些测试,现在我想知道什么是组成更复杂的任意套的好策略。 是否以任意好的方式注册任意人? 像这样
public class DiscountAmountArbitrator
{
public static Arbitrary<DiscountAmount> DiscountAmounts()
{
Arb.Register<AmountArbitrary>();
var toReturn = (from a in Arb.Generate<Amount>()
select new DiscountAmount(a))
.ToArbitrary();
return toReturn;
}
}
public class AmountArbitrary
{
public static Arbitrary<Amount> Amounts()
{
return Arb.Generate<decimal>().Where(x => x > 0)
.Select(x => new Amount(x))
.ToArbitrary();
}
}
我的建议是,如果您有不同的相关任意实例,请将它们添加到同一类中,然后在不同实例之间存在依赖关系时直接调用方法。 然后,在测试中使用任何任意实例时,请一次注册所有实例。
这使您的代码更少地依赖于执行顺序(Arb.Register从根本上是副作用操作,这可能会导致一些意外的结果)。 将任意方法放在不同的类上并没有真正的优势。 因此,我将重写以下内容:
public class Arbitraries
{
public static Arbitrary<DiscountAmount> DiscountAmounts()
{
var toReturn = (from a in Amounts().Generator
select new DiscountAmount(a))
.ToArbitrary();
return toReturn;
}
public static Arbitrary<Amount> Amounts()
{
return Arb.Generate<decimal>().Where(x => x > 0)
.Select(x => new Amount(x))
.ToArbitrary();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.