Модульное тестирование c# - создание макетов DataContexts / LINQ - > SQL classes
Я люблю Новый мир, который является c#, я пришел к точке с моими игрушечными программами, где я хочу начать писать некоторые модульные тесты.
мой код в настоящее время использует базу данных через объект DatabaseDataContext (*.dbml file), каков наилучший способ создания макета для этого объекта? Учитывая, насколько легко генерировать код базы данных LINQ - > SQL и насколько распространенным должен быть запрос, я надеюсь, что VS2010 имеет встроенную функциональность, чтобы помочь с тестированием.
Если я далеко и это должно быть сделано вручную, не могли бы вы просветить меня, как ваш предпочтительный подход?
Большое Спасибо,
Гэвин
4 ответов
проблема с DataContext заключается в том, что он не предназначен для насмешек.
бесплатный инструмент для издевательства над unmockable является родинки от Pex (родинки Pex?). Его примерно эквивалентно TypeMock.
лучший способ, который я знаю, - это извлечь интерфейс этого объекта и использовать его для создания макета объекта, поэтому действительно не имеет значения, используете ли вы linqtosql или EF для разговора с базой данных или вообще с любой базой данных.
[отказ от ответственности: я работаю в Typemock]
можно использовать Typemock Изолятор чтобы создать поддельный объект и установить его методы, чтобы вернуть то, что вам нужно:
var fakeContext = Isolate.Fake.Instance<DatabaseDataContext>();
взгляните на это сообщение в блоге о том, как подделать Linq2Sql:подделка таблиц LINQ to SQL DataContext с изолятором
несколько вещей, которые могут быть полезны для вас:
Moq (произносится как "Mock-you" или просто "Mock") - единственная издевательская библиотека для .NET, разработанного с нуля до воспользуйтесь всеми преимуществами .NET 3.5 (т. е. Деревья выражений Linq) и C# 3.0 особенности (т. е. лямбда-выражения) что делает его наиболее продуктивным, тип-безопасный и рефакторинг-дружелюбный насмешливый библиотеки. И это поддержка насмешливых интерфейсов так же как занятия. Его API чрезвычайно прост и прямолинейно, и не делает требует каких-либо предварительных знаний или опыт работы с насмешливыми концепциями.
LINQPad позволяет интерактивно запрашивать базы данных на современном языке запросов: В LINQ. Поцелуй на прощание с управлением SQL Студия!
LINQPad поддерживает все в C# 3.0 и Framework 3.5 и более:
LINQ to Объекты LINQ to SQL и Entity Framework LINQ to XML WCF данных Службы & SQL Azure LINQ to SQLite и MySQL Enterprise Server Mindscape ОРМ скорости света (даже старомодный В SQL!)