使用AutoFixture将集合的属性设置为Xunit理论的数据

Ale*_*gas 4 unit-testing xunit.net autofixture

我是Xunit和AutoFixture的新手,他写的理论如下:

[Theory, AutoData]
public void Some_Unit_Test(List<MyClass> data)
{
    // Test stuff
}
Run Code Online (Sandbox Code Playgroud)

MyClass看起来像:

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这将导致AutoFixture创建每个属性具有随机值的项目列表。很好,但是我希望该IsActive属性始终为真。

我可以在每次测试开始时将其设置为true,但我猜有一种更聪明的方法。我看了看InlineDataClassDataPropertyData,甚至Inject()但没有相当似乎适合。

我该如何改善?

Nik*_*nis 5

这是执行此操作的一种方法:

public class Test
{
    [Theory, TestConventions]
    public void ATestMethod(List<MyClass> data)
    {
        Assert.True(data.All(x => x.IsActive));
    }
}
Run Code Online (Sandbox Code Playgroud)

TestConventionsAttribute定义为:

internal class TestConventionsAttribute : AutoDataAttribute
{
    internal TestConventionsAttribute()
        : base(new Fixture().Customize(new TestConventions()))
    {
    }

    private class TestConventions : ICustomization
    {
        public void Customize(IFixture fixture)
        {
            fixture.Customize<MyClass>(c => c.With(x => x.IsActive, true));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)