如何使用AutoFixture创建对象但不填写任何属性

时间:2016-07-25 10:34:28

标签: unit-testing autofixture

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

_fixture.Create<FilterItems>()

使用这种技术我可以保护未来可能出现的构造函数中的任何更改,但它也会填充所有属性,在这种情况下(因为它是一组过滤器)是不需要的。

有没有办法告诉AutoFixture创建对象,但不填写任何属性?

我知道那里没有方法可以跳过一个字段,但是使用它意味着我必须继续添加它,而我只是从一个空对象开始并在测试需要时添加它

2 个答案:

答案 0 :(得分:6)

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

您可以将其作为一次性操作:

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

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

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

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

fixture.OmitAutoProperties = true;

如果您正在使用其中一个单元测试胶水库,例如AutoFixture.Xunit2,您也可以声明性地执行:

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

答案 1 :(得分:1)

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