Модульное тестирование в C # - создание фиктивных DataContexts / LINQ -> классов SQL - PullRequest
10 голосов
/ 26 апреля 2010

Мне нравится новый мир C #, я пришел к тому, что со своими игрушечными программами я хочу начать писать какие-то модульные тесты.

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

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

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

Gavin

Ответы [ 4 ]

5 голосов
/ 26 апреля 2010

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

Бесплатный инструмент для насмешек над немодным: Родинки от Pex (Pex родинки?) . Это примерно эквивалентно TypeMock.

3 голосов
/ 26 апреля 2010

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

1 голос
/ 26 апреля 2010

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

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

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

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

0 голосов
/ 26 апреля 2010

Несколько вещей, которые могут быть вам полезны:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...