Вы должны рассмотреть инструменты, чтобы сделать такую работу за вас.Как AutoFixture .По сути, это создает объекты.Как бы просто это не звучало, AutoFixture может делать именно то, что вам нужно - создание объекта с некоторыми параметрами, которые вас не интересуют :
MyClass sut = fixture.CreateAnnonymous<MyClass>();
MyClass
будет создано с фиктивными значениями для параметров конструктора, свойств и т. Д. (Обратите внимание, что это будут не значения по умолчанию, такие как null
, а фактические экземпляры - все же это сводится к одному и тому же; поддельные нерелевантные значения, которыенужно быть там).
Редактировать: Чтобы немного расширить введение ...
AutoFixure также поставляется с расширением AutoMoq, чтобы стать полноценным авто-насмешливый контейнер .Когда AutoFixture не может создать объект (а именно, интерфейс или абстрактный класс), он делегирует создание в Moq - вместо этого создаются mocks.
Итак, если у вас был класс с сигнатурой конструктора, такой как:
public ComplexType(IDependency d, ICollaborator c, IProvider p)
Ваша тестовая установка в сценарии, когда вы не заботитесь о каких-либо зависимостях и хотите просто nulls
, будет состоять целиком из 2 строк кода:
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var testedClass = fixture.CreateAnonymous<ComplexType>();
Это все, что есть.testedClass
будет создан с помощью макетов, сгенерированных Moq под капотом.Обратите внимание, что testedClass
это не макет - это реальный объект, который вы можете проверить, как если бы вы создали его с помощью конструктора.
Он становится еще лучше.Что делать, если вы хотите, чтобы некоторые макеты создавались динамически с помощью AutoFixture-Moq, но некоторые другие макеты вы хотели бы иметь больше контроля, например.проверить в данном тесте?Все, что вам нужно, это одна дополнительная строка кода :
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var collaboratorMock = fixture.Freeze<Mock<ICollaborator>>();
var testedClass = fixture.CreateAnonymous<ComplexType>();
ICollaborator
- это макет, к которому у вас есть полный доступ, вы можете выполнить .Setup
, .Verify
и всесвязанные вещи.Я действительно предлагаю взглянуть на AutoFixture - это отличная библиотека.