我在测试中使用 AutoFixture,需要生成具有特定规则的对象。
我有一个对象,其中有一些包含对象的嵌套属性。业务规则是这样的:每个嵌套对象中的一个属性的值必须等于根对象中的属性的值。
考虑:
public class Root {
public string Number { get; set; }
public Nested1 Nested1 { get; set; }
public Nested2 Nested2 { get; set; }
}
public record Nested1 {
public string Number { get; init; }
}
public record Nested2 {
public string Number { get; init; }
}
必须遵守以下规则:
Root.Number == Root.Nested1.Number == Root.Nested2.Number
是否可以自定义 Root 对象的生成,使得
Nested1.Number
和 Nested2.Number
属性具有与 Root.Number
中相同的值?
您可以在
Customize
类中使用 Fixture
方法。以下是定制示例:
[Fact]
public void Test1()
{
// Arrange
var fixture = new Fixture();
fixture.Customize<Root>(composer =>
{
var s = "some string";
return composer.With(x => x.Number, s)
.With(x => x.Nested1, new Nested1 { Number = s })
.With(x => x.Nested2, new Nested2 { Number = s });
});
// Act
var root = fixture.Create<Root>();
// Assert
Assert.Equal(root.Number, root.Nested1.Number);
Assert.Equal(root.Number, root.Nested2.Number);
}