Я работаю над некоторыми тестами, в которых я хотел бы создать логику настройки объекта c, которая инкапсулирована в классы настройки Autofixture. Вот соответствующие части того, что у меня есть:
public class UseSpecificConstructorCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<MyObject>(c => c.FromFactory((string s) => new MyObject(s)));
}
}
public class ExecuteMethodCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<MyObject>(c => c.Do(x => x.AMethodIWantToExecute()));
}
}
Для каждой из этих настроек у меня есть соответствующая реализация CusomizeAttribute
, которая возвращает экземпляр настройки. Теперь в моем тесте (NUnit3.x) я хотел бы сделать что-то вроде этого:
[Test,AutoData]
public void ThisIsMyTestMethod([UseSpecificConstructor,ExecuteMethod] MyObject obj)
{
// Here I would like the object to have been created using the specified
// string constructor AND the method 'AMethodIWantToExecute' to have been executed.
}
Поведение, которое я наблюдаю, предполагает, что в этом случае только одна из двух настроек used - кажется, в зависимости от того, что указано последним. Это имеет какой-то смысл, потому что Autofixture - это «создание» объектов, а не их изменение после их создания. Не имеет смысла иметь две настройки (которые внутренне соответствуют создателям образцов), которые будут использоваться для создания одного и того же объекта.
Есть ли способ, используя Autofixture, достичь того, что я описал? Я предполагаю, что мне нужен механизм, похожий на настройку, который не использует конструктор образцов, а вместо этого предоставляет «настройщик образцов» для последующей обработки объекта после того, как конструктор образцов выполнил свою работу. Такой механизм сможет только установить свойства и использовать .Do()
(не .FromFactory()
et c). Если он не существует, я могу go и запросить функцию, но, возможно, он существует, и я его не вижу.
Я понимаю, что я мог бы альтернативно переместить эту "конфигурацию объекта после создания "logi c в самом тесте, но он длиннее нескольких строк, и я бы не стал его дублировать. Кроме того - эта логика установки c не имеет особого отношения к тесту, она просто переводит объект в базовое c допустимое состояние. «Познавательно», что logi c принадлежит логике создания объекта; IE: разработчик не хочет думать об этом.