【发布时间】:2013-01-29 18:06:47
【问题描述】:
(我没有找到办法,从源代码看来是不支持的,但我可能忽略了它)
我想做类似的事情:
(new Fixture())
.CreateAnonymous<Circle>(
new CircleSpecification { MinRadius = 1, MaxRadius = 5 }
);
所以这是 AutoFixture 中已经存在的类似种子习语的变体,但种子习语是非常硬编码的(或者我认为如此)。
问题:是否可以自定义夹具以接受样本的参数?
到目前为止,我最好的想法是构建一个包含结果对象的特殊规范类,以便您可以这样做:
public class CircleSpecification {
public double MinRadius { get; set; }
public double MaxRadius { get; set; }
public Circle Circle { get; set; }
}
以便我注册CircleSpecificationSpecimenBuilder可以使用:
Circle circle = Fixture.CreateAnonymous<CircleSpecification>(
new CircleSpecification { MinRadius = 0.0, MaxRadius = 5.0 }).Circle;
请注意,使用带有种子重载种子参数类型的 CreateAnonymous 必须匹配方法返回类型。
【问题讨论】:
-
你想用这个完成什么?
-
我想创建一个测试数据构建器库,可用于编写单元测试(或集成测试)。这样我就可以构建一个业务对象,如:
var bill = Fixture.CreateAnonymous<Bill>(new BillSpec { TotalAmount = 120.00, Tip = 15.00 });- 并获得一张包含许多项目的账单。我可以只构建一个辅助方法,但感觉如果我使用 AutoFixture,我应该有 AutoFixture 来构建对象,如果我在 AutoFixture 之外构建我的 Bill,为什么我需要 AutoFixture? -
Bill(或Circle)类的外观如何? -
public class Circle { public double Radius { get; set; } } -
对于我的测试,有时我想要半径为 0 的圆,有时我希望它非常大,有时我想要一堆半径在 0 到 5 之间的圆。所以我在询问是否 AF API 允许向构建者提供额外的信息,以进一步将样本专门用于我的测试。像现在这样,大部分 AF 只依赖运行时类型来寻找构建器,所以一旦我配置了如何构建 Circle,每次都会使用该配置。
标签: autofixture