Модульное тестирование 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!)