Я люблю новый мир, который является C#, я приехал в точку со своими игрушечными программами, где я хочу начать писать некоторые модульные тесты.
Мой код в настоящее время использует базу данных через объект DatabaseDataContext (*.dbml файл), что лучший способ состоит в том, чтобы создать насмешку для этого объекта? Учитывая то, как легкий это должно генерировать базу данных LINQ-> код SQL и как распространенный запрос, которым это должно быть, я надеюсь, что VS2010 создал в функциональности для помощи с тестированием.
Если я - путь прочь, и это должно быть сделано вручную, Вы могли бы просветить меня относительно Вашего предпочтительного подхода?
Большое спасибо,
Gavin
Проблема с DataContext в том, что он не предназначен для имитации.
Бесплатный инструмент для издевательства над несокращаемым - это Родинки из Pex (Pex moles?) . Это примерно эквивалент TypeMock.
[Заявление об ограничении ответственности: я работаю в Typemock]
Вы можете использовать Typemock Isolator , чтобы создать поддельный объект и настроить его методы для возврата того, что вам нужно:
var fakeContext = Isolate.Fake.Instance<DatabaseDataContext>();
Взгляните на это сообщение в блоге о том, как подделать Linq2Sql: Подделка таблиц LINQ to SQL DataContext с помощью изолятора
Несколько вещей, которые могут быть вам полезны:
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!)
Лучший способ, который я знаю, - это извлечь интерфейс этого объекта и использовать его для создания фиктивного объекта, поэтому на самом деле не имеет значения, используете ли вы linqtosql или EF, чтобы разговаривать с базой данных, или если вы вообще разговариваете с любой базой данных.