С# Unit Testing - Генерирование Mock DataContexts/LINQ → SQL-классы

Я люблю новый мир, который является С#, я пришел к делу с моими игрушечными программами, где я хочу начать писать отдельные тесты.

В моем коде в настоящее время используется база данных через объект DatabaseDataContext (файл *.dbml), какой лучший способ создать макет для этого объекта? Учитывая, насколько легко создавать базу данных LINQ → код SQL и как часто это необходимо, я надеюсь, что VS2010 имеет встроенные функциональные возможности для тестирования.

Если я уйду, и это нужно сделать вручную, можете ли вы рассказать мне о вашем предпочтительном подходе?

Большое спасибо,

Гэвин

Ответ 1

Проблема с DataContext заключается в том, что он не предназначен для насмешек.

Свободным инструментом для издевательств над unmockable является Moles from Pex (Pex moles?). Его примерно эквивалентно TypeMock.

Ответ 2

Лучший способ, который я знаю, - извлечь этот объектный интерфейс и использовать его для создания объекта mock, поэтому действительно не имеет значения, используете ли вы linqtosql или EF для связи с базой данных, или если вы разговариваете с любой базой данных на все.

Ответ 3

[Отказ от ответственности: я работаю в Typemock]

Вы можете использовать Typemock Isolator для создания поддельного объекта и установить его методы для возврата того, что вам нужно:

var fakeContext = Isolate.Fake.Instance<DatabaseDataContext>();

Взгляните на это сообщение в блоге о том, как подделать Linq2Sql: Подделка LINQ to SQL DataContext Tables with Isolator

Ответ 4

Немногие вещи, которые могут вам пригодиться:

Moq (произносится как "Mock-you" или просто "Mock" ) - единственная насмешливая библиотека для .NET, разработанный с нуля до в полной мере использовать .NET 3.5 (т. Linq) и С# 3.0 (например, лямбда-выражения) которые делают его наиболее продуктивным, безопасный тип и рефакторинг доступная библиотека. И это поддерживает насмешливые интерфейсы, а также классы. Его API чрезвычайно прост и прямо, и не требуют каких-либо предварительных знаний или опыт с насмешливыми понятиями.

LINQPad позволяет интерактивно запрашивать базы данных в современном языке запросов: LINQ. Поцелуй до свидания с SQL Management Студия!

LINQPad поддерживает все в С# 3.0 и Framework 3.5 и более:

LINQ для объектов LINQ to SQL и Entity Framework LINQ to XML Данные WCF Службы и SQL Azure LINQ to SQLite и MySQL Enterprise Server Mindscape LightSpeed ​​ORM (даже старомодный SQL!)