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

问题描述 投票:0回答:1
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赋值之前,它们都为空。在第一次任务之后,他们都是12345.在第二次之后他们都是4654在第三次之后他们都是87745

我希望能够为特定属性分配特定值...这里是否有足够的信息来了解为什么这不起作用,或者想要在哪里查看?

c# autofixture
1个回答
2
投票

我一开始并没有发现它,而是通过使用

_fixture.Inject(pnd);

...你基本上对AutoFixture说:“无论何时你需要创建一个PenaltyNotice,使用(单个实例)pnd”。因此,您最终会在集合的每个成员中使用相同的实例。

你可能打算做什么

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

Inject类似,但现在每次AutoFixture创建一个PenaltyNotice时,它使用该函数来创建一个新实例。

© www.soinside.com 2019 - 2024. All rights reserved.