自动修复 : pass an argument to specimen builder

标签 autofixture

(我没有找到这样做的方法,从源代码看来它不受支持,但我可能忽略了它)

我想做一些类似于:

(new Fixture())
    .CreateAnonymous<Circle>(
        new CircleSpecification { MinRadius = 1, MaxRadius = 5 }
    );

所以这是 AutoFixture 中已经存在的类似种子习语的变体,但种子习语是非常硬编码的(或者我认为)。

问题 :是否可以自定义夹具以接受样本的参数?

到目前为止,我最好的想法是构建一个包含结果对象的特殊 Specification 类,以便您可以执行以下操作:
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 必须匹配方法返回类型。

最佳答案

如果你想在创建 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
}

关于自动修复 : pass an argument to specimen builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589360/

相关文章:

c# - 是否可以让 xUnit 创建的 ITestOutputHelper 在 AutoFixture 上下文中可用?

c# - 使用 AutoFixture 中的 CreateMany 省略特定字段

c# - 通过 AutoFixture 使用私有(private) setter 测试数据填充公共(public)属性

c# - AutoFixture 是否有一种机制来检查返回任何类型列表的方法是否永远不会返回 null?

c# - 带种子的 CreateMany 有什么作用?

c# - AutoFixture AutoMoq 不使用我的属性模拟

c# - 无法掌握 Freeze/Inject/Register 之间的区别

c# - Autofixture:控制创建的 string[] 类型元素的数量

c# - 如何从所有枚举类型中排除某些枚举

git - 如何在不使用 NuGet 的情况下获取 GitHub 上列出的具有 NuGet 包的库的二进制文件?