автокрепление: удаление настройки - PullRequest
0 голосов
/ 30 мая 2018

В настройках моего теста NUnit я создаю настройки AutoFixture, где мне нужны предопределенные значения для моих объектов.Однако это просто значения по умолчанию - некоторые тесты должны как-то переопределять эти значения по умолчанию.Вот как я могу добавить настройку:

        fixture.Customizations.Add(new FilteringSpecimenBuilder(new FixedBuilder(value),
            new ParameterSpecification(valueType, propertyName)));

Если я просто добавлю новую настройку в тесте, эта настройка фактически не будет применена, потому что она ниже в графике.

Поэтому я подумал, что смогу сделать remove настройку, которая соответствует сигнатуре FilteringSpecimenBuilder, которую я создал ранее, но, похоже, это не сработает, если это не фактический экземпляр FilteringSpecimenBuilder, который я создал в программе установки.И чтобы это работало, мне нужно было сохранить на потом и каталогизировать все экземпляры, которые я создал в программе установки, что кажется избыточным, поскольку они уже являются частью графика Fixture.

Затем я попыталсячто-то вроде этого, где «имя» - это фактическое имя переменной, которую я пытаюсь удалить, но очевидно, что ссылка на свойства TargetType и TargetName недопустима, поскольку они устарели (а сообщение об ошибке не объясняет, что заменаis):

        fixture
            .Customizations
            .OfType<FilteringSpecimenBuilder>()
            .Where(x => x.Specification is ParameterSpecification)
            .Where(x=>(((ParameterSpecification)x.Specification).TargetName == "name"))
            .ToList()
            .ForEach(c => fixture.Customizations.Remove(c));

Кто-нибудь знает способ замены настройки или удаления существующей?

1 Ответ

0 голосов
/ 01 июня 2018

Если вы хотите переопределить существующую функциональность, самое простое решение - поместить ее перед настройкой, которую вы хотите переопределить.Метод Add добавляет в конец коллекции, поэтому вместо него используйте Insert:

fixture.Customizations.Insert(0, new MySpecimenBuilder());

Вставка по индексу 0 ставит этот конструктор раньше всего, что означает, что он будет первымбыть проверенным.

...