【问题标题】:How can I use AutoFixture to create an object but not fill out any properties如何使用 AutoFixture 创建对象但不填写任何属性
【发布时间】:2016-07-25 10:34:28
【问题描述】:

使用 AutoFixture,我可以使用 Create 方法轻松创建数据对象的实例,如下所示:

_fixture.Create<FilterItems>()

使用这种技术,我可以防止将来可能发生的构造函数中的任何更改,但它也会填写在这种情况下(因为它是过滤器的集合)不需要的所有属性。

有什么方法可以告诉 AutoFixture 创建对象,而不填写任何属性?

我知道有一个Without方法可以跳过一个字段,但是使用它意味着我必须继续添加它,而我宁愿从一个空对象开始,如果测试需要它就添加它。

【问题讨论】:

    标签: unit-testing autofixture


    【解决方案1】:

    有很多方法可以做到这一点。

    您可以一次性完成:

    var fi = fixture.Build<FilterItems>().OmitAutoProperties().Create();
    

    您还可以自定义 fixture 实例以始终忽略特定类型的自动属性:

    fixture.Customize<FilterItems>(c => c.OmitAutoProperties());
    

    或者您可以完全关闭自动属性:

    fixture.OmitAutoProperties = true;
    

    如果您正在使用像 AutoFixture.Xunit2 这样的单元测试 Glue 库之一,您也可以以声明方式进行:

    [AutoData]
    public void MyTest([NoAutoProperties]FilterItems fi)
    {
        // Use fi here...
    }
    

    【讨论】:

    • 哇,我刚刚在看你关于 Pluralsight 的高级课程。在 4 分钟内得到作者本人的答复真是太棒了!感谢您的回答,我完全误解了 AutoProperties 文档,这似乎暗示(对我而言)此功能将跳过具有默认值的属性,因此不会跳过否则会导致默认值()的值。
    【解决方案2】:

    您应该在创建样本之前致电_fixture.OmitAutoProperties = true;。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多