在填充特定类型的所有属性后,如何向 AutoFixture 添加后处理步骤?

问题描述 投票:0回答:1

我在测试中使用 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
中相同的值?

c# .net autofixture
1个回答
0
投票

您可以在

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.