如何使用 AutoFixture 为 属性 即 class 生成数据?
How to use AutoFixture to generate data for a property that is a class?
我正在尝试自定义在 class.. 中生成的数据,其中 属性 是 另一个 class。
例如
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();
}
有没有更简洁的方法来做到这一点?或者 .. 这基本上是 only/recommended 方式?
我知道 AutoFixture 可以自动为我创建一个 Baa
的实例,并为其中的属性创建数据。我只是希望能稍微自定义一下。
既然你想按照惯例配置 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
我正在尝试自定义在 class.. 中生成的数据,其中 属性 是 另一个 class。
例如
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();
}
有没有更简洁的方法来做到这一点?或者 .. 这基本上是 only/recommended 方式?
我知道 AutoFixture 可以自动为我创建一个 Baa
的实例,并为其中的属性创建数据。我只是希望能稍微自定义一下。
既然你想按照惯例配置 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