Поблочное тестирование C# - Генерирующий Насмешку DataContexts / LINQ-> классы SQL

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

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

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

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

Gavin

10
задан gav 26 April 2010 в 12:21
поделиться

4 ответа

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

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

5
ответ дан 4 December 2019 в 01:56
поделиться

[Заявление об ограничении ответственности: я работаю в Typemock]

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

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

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

1
ответ дан 4 December 2019 в 01:56
поделиться

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

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

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

LINQPad поддерживает все, что есть в C # 3.0 и Framework 3.5, и многое другое:

LINQ to Objects LINQ to SQL и Entity Framework LINQ to XML WCF Data Services & SQL Azure LINQ to SQLite и MySQL Enterprise Server Mindscape LightSpeed ​​ORM (даже устаревший SQL!)

0
ответ дан 4 December 2019 в 01:56
поделиться

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

3
ответ дан 4 December 2019 в 01:56
поделиться