2013-05-14 2 views
15

Мне нужно создать объект из AutoFixture, используя не что иное, как System.Type. Однако, похоже, не существует перегрузки CreateAnonymous(), которая просто берет тип. Они все ожидают компиляции времени generic T. Есть ли способ конвертировать System.Type в T?AutoFixture: как CreateAnonymous от System.Type

Редактировать с деталями использования:

Я использую AutoMapper, которая имеет крюк для введения компонентов для поддержки сложных сценариев отображения:

void ConstructServicesUsing(System.Func<Type,object> constructor) 

Как вы можете видеть из подписи, клиенты могут зарегистрироваться a Func, который AutoMapper вызывает в любое время, когда ему требуется внедренная служба (в основном реализация ValueResolver).

В строках сборки этот метод вызывает мой контейнер StructureMap для извлечения компонента. Однако, когда модуль тестирует мой код сопоставления, I должен обеспечить реализацию заглушек, в противном случае AutoMapper выдает исключение. Поскольку я использую AutoFixture + Moq в качестве контейнера для автомоек, кажется естественным, чтобы AF обновил полностью гидратированный заглушку, поэтому я могу сосредоточиться на написании кода тестового кода.

+2

Не могли бы вы рассказать подробнее о своем сценарии использования? В каком типе теста вы не знаете время компиляции своего типа, чтобы вы не могли использовать метод CreateAnonymous? – nemesv

ответ

28

Это possible, но намеренно скрыты, так как вы должны очень редко нужно сделать это:

var specimen = new SpecimenContext(fixture).Resolve(type); 

Есть тонны точек расширения в AutoFixture, что, чаще всего, обеспечивают лучшую альтернативу, чем слабо типизированный метод Create. Что вы пытаетесь достичь?

+0

Спасибо, Марк. Работал как шарм. –

+0

Спасибо, Марк. В моем случае я пишу одного помощника, чтобы проверить все свойства экземпляра, чтобы они правильно подняли событие PropertyChanged. Может быть, немного взломано, но я бы предпочел написать тест один раз общим способом, а затем не придется беспокоиться об этом. –

+0

@MattKlein Вы должны взглянуть на [AutoFixture.Idioms] (http://www.nuget.org/packages/AutoFixture.Idioms). Вы можете сделать это «IdiomaticAssertion». –

Смежные вопросы