如何为集合中的属性分配特定值?

时间:2019-04-04 17:37:24

标签: c# autofixture

public PNDTicketNumberIsUniqueValidatorTests()
{
    _fixture = new Fixture().Customize(new AutoMoqCustomization());
    _validator = new PNDTicketNumberIsUniqueValidator();

    var pnd = _fixture.Build<PenaltyNotice>()
        .OmitAutoProperties()
        .Create();

    _fixture.Inject(pnd);

    _model = _fixture.Build<CaseModel>().OmitAutoProperties().With(w => w.PenaltyNoticeDisorders).Create();

    _model.PenaltyNotices[0].IdNumber = "12345";
    _model.PenaltyNotices[1].IdNumber = "4654";
    _model.PenaltyNotices[2].IdNumber = "87745";
}

完成此设置后,每个罚单都具有相同的IDNumber。

单步执行代码之后,在分配任何IdNumber之前,它们都为null。 第一次分配后,他们都是12345。 在第二个之后,它们都是4654 在第三之后,他们都是87745

我希望能够将特定的值分配给特定的属性...这里是否有足够的信息来说明为什么此方法不起作用,或者关于在哪里寻找想法?

1 个答案:

答案 0 :(得分:2)

我最初没有发现它,而是使用

_fixture.Inject(pnd);

...您基本上是对AutoFixture说:“每当需要创建PenaltyNotice时,就使用(单个实例)pnd”。因此,您最终在集合的每个成员中拥有相同的实例。

您原本打算的是

_fixture.Register<PenaltyNotice>(() => _fixture
    .Build<PenaltyNotice>()
    .OmitAutoProperties()
    .Create());

类似于Inject,但是现在每次AutoFixture创建一个PenaltyNotice时,它都会使用该功能来创建新实例。