如何使用AutoFixture为类属性生成数据?

时间:2016-02-05 03:23:45

标签: c# .net autofixture

我正在尝试自定义类中生成的数据..其中属性是另一个类。

例如

public class Foo
{
   public string Id { get; set; }
   public Baa Baa { get; set; }
}


public class Baa
{
   // 30 properties which are strings, ints, etc.
}

我想知道我是否可以做这样的事情......

var fixture = new Fixture();
return fixture.Build<Foo>()
    .With(x => x.Id, $"Foo-{fixture.Create<int>()}")
    .With(x => x.Baa, CreateSomeCustomBaaUsingAutofixture)
    .Create();

然后..

private Baa CreateSomeCustomBaaUsingAutofixture()
{
    var fixture = new Fixture();
    return fixture.Build<Baa>()
        .With(lots of customizations here)
    .Create();
}

有更清洁的方法吗?或者......基本上是唯一/推荐的方式?

据我所知,AutoFixture可以自动为我创建Baa的实例,并为其中的属性创建数据。我只是希望能够更多地定制它。

1 个答案:

答案 0 :(得分:2)

由于您希望按惯例配置Baa,因此您可以这样做。它可能看起来像这样:

fixture.Customize<Baa>(c => c
    .With(x => x.Baz, "Corge")
    .With(x => x.Qux, "Garply"));

每当您创建Foo对象时,Baa属性将根据这些规则创建一个值:

var foo = fixture.Create<Foo>();
Console.WriteLine(foo.Baa.Baz);
Console.WriteLine(foo.Baa.Qux);

打印:

Corge
Garply