насмешливый LINQ to SQL - PullRequest
       9

насмешливый LINQ to SQL

0 голосов
/ 15 декабря 2009

Каков наилучший и самый простой способ модульного тестирования класса, который использует LINQ to SQL и возвращает обратно десятичное число? Если да, то как мне это сделать?

Ответы [ 4 ]

1 голос
/ 15 декабря 2009

Мне не удалось придумать удобное решение для моделирования для модульного тестирования с Linq to SQL, поэтому я пошел другим путем.

Я создал тестовую базу данных с известными значениями в ней для проверки. Затем, поскольку вы не хотите, чтобы ваши тесты изменяли содержимое ваших данных, я использовал расширение XtUnit для NUnit: http://weblogs.asp.net/rosherove/archive/2004/10/05/238201.aspx

Это расширение волшебным образом отменяет любые изменения, которые ваш тест вносит в базу данных после его завершения.

Я не буду лгать, это решение довольно уродливо. Тем не менее, это также не требует от вас придумывать причудливую концепцию насмешек. После того, как вы установили свои тестовые данные, очень легко написать свои тесты. Все ваши тесты должны убедиться, что ваш класс наследует от ExtensibleFixture, и пометить ваши тесты атрибутом [DataRollBack], а XtUnit сделает все остальное.

1 голос
/ 15 декабря 2009

Вы должны обернуть вызов метода LINQ to SQL в классе, который реализует интерфейс, чтобы можно было использовать mocking.

В любом случае, в .NET 4 определен интерфейс ITable, который очень поможет при использовании макетов для тестирования сценариев, использующих LINQ to SQL (http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40).. Другой вариант - это смоделировать сам DataContext, см. например здесь: http://andrewtokeley.net/archive/2008/07/06/mocking-linq-to-sql-datacontext.aspx

0 голосов
/ 15 декабря 2009
0 голосов
/ 15 декабря 2009

Вот статья о насмешках над LINQ to SQL DataContext . Похоже, это то, что вы ищете, потому что в нем говорится:

Так что [обычно] на самом деле не возможно объединить проверить ваши запросы Linq to SLQ без будучи подключенным к базовым данным Источник - не идеал. Но не бойтесь, здесь является общим решением этой проблемы .

И это суммируется с

Итак, теперь у нас есть способ проверить наш LINQ на запросы SQL в пределах нашего Класс CustomerController без полагаясь на базу данных с привязкой DataContext

Кроме того (после того, как вышеприведенное работает), библиотека NMock помогает программировать фиктивные объекты для ситуаций и может использоваться для более формального программирования или для интеграции с другими имитациями (у меня есть не пробовал).

...