(我没有找到办法做到这一点,从源代码看来它不支持,但我可能忽略了它)
我想做类似的事情:
(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和种子重载种子参数类型必须匹配方法返回类型。
答案 0 :(得分:5)
如果要在创建Circle
的匿名实例时分配值,可以使用Build
方法:
var fixture = new Fixture();
var c = fixture
.Build<Circle>()
.With(x => x.Radius, 3)
.CreateAnonymous();
但是,如果Radius
属性没有什么特别之处,为什么不在之后简单地为它赋值?
var fixture = new Fixture();
var c = fixture.CreateAnonymous<Circle>();
c.Radius = 3;
后一个选项更具说明性,并且允许您使用AutoFixture's xUnit.net integration编写更加简洁的测试,以消除所有意外的复杂性:
[Theory, AutoData]
public void Test3(Circle c)
{
c.Radius = 3;
// Act and assert here
}