Как я могу присвоить определенное значение свойствам в коллекции? - PullRequest
0 голосов
/ 04 апреля 2019
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

Я хочу иметь возможность назначать конкретные значения определенным свойствам ... Достаточно ли здесь информации, чтобы понять, почему это не сработает, или есть идеи, где искать?

1 Ответ

2 голосов
/ 04 апреля 2019

Сначала я его не заметил, но с помощью

_fixture.Inject(pnd);

... вы в основном говорите AutoFixture: «когда вам нужно создать PenaltyNotice, используйте (единственный экземпляр) pnd». Следовательно, вы получаете один и тот же экземпляр в каждом члене вашей коллекции.

То, что вы, вероятно, намеревались было вместо этого

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

Аналогично Inject, но теперь каждый раз, когда AutoFixture создает PenaltyNotice, она вместо этого использует эту функцию для создания нового экземпляра.

...