Как люди тестируют код, который использует Linq для SQL?
Как люди тестируют код, который использует Linq to SQL
Ответ 1
Update:
Fredrik поставил пример решения о том, как сделать приложения unit test linq2sql в своем блоге. Его можно загрузить по адресу:
Не только я считаю своим замечательным, что он опубликовал пример решения, ему также удалось извлечь интерфейсы для всех классов, что делает дизайн более развязанным.
Мой старый пост:
* Я нашел эти блоги, которые, я думаю, являются хорошим началом для создания оболочки DataContext: Link1 Link2
Они охватывают почти ту же тему, за исключением того, что первая реализует средства для извлечения интерфейсов для таблиц. Второй - более обширный, поэтому я включил его также. *
Ответ 2
3 года спустя, но вот как я это делаю:
https://github.com/lukesampson/LinqToSQL-test-extensions/
Не нужно писать обертку или делать много сантехники, просто снимите шаблон T4 рядом с вашим .dbml и получите:
- Интерфейс для вашего контекста данных, например. IExampleDataContext
- В памяти макет для вашего контекста данных, например. MemoryExampleDataContext
Оба будут автоматически использовать сопоставления, которые вы уже настроили в своем DBML.
Итак, вы можете делать такие вещи, как
public class ProductRepo {
IExampleDataContext DB { get; set };
public ProductRepo(IExampleDataContext db) {
DB = db;
}
public List<Product> GetProducts() {
return DB.Products.ToList();
}
}
и вы можете вызвать это с помощью
new ProductRepo(new MemoryExampleDataContext()).GetProducts(); // for testing
или
new ProductRepo(new ExampleDataContext()).GetProducts(); // use the real DB
Ответ 3
Оберните DataContext, а затем обманите обертку. Его самый быстрый способ сделать это, для этого требуется кодирование для тестирования, которое некоторые люди считают запахами. Но иногда, когда у вас есть зависимости, которые невозможно (легко) издеваться, это единственный способ.
Ответ 4
Мгновенье над В своенравном веб-журнале была отличная статья о том, как макет расширяемого контекста данных Linq2Sql. Проверьте это - MOCKS NIX - ДОПОЛНИТЕЛЬНАЯ LINQ TO SQL DATACONTEXT
Ответ 5
Linq упрощает тестирование. Запросы Linq работают также и в списках, как в материалах Linq-to-sql. Вы можете поменять Linq на SQL для объектов списка и протестировать таким образом.
Ответ 6
Обычно вам не нужно проверять часть кода, использующего LINQ to SQL, но если вы действительно этого хотите, вы можете использовать те же наборы данных, которые вы запрашиваете на сервере, объекты памяти и запускать запросы LINQ к этому (который будет использовать методы Enumerable вместо Queryable).
Другим вариантом является использование Matt Warren макетной версии DataContext.
Вы также можете получить инструкции SQL, которые использует LINQ to SQL, путем их получения через отладчик (из объекта IQueryable), проверить их вручную и затем включить их в автоматические тесты.
Ответ 7
LINQ to SQL на самом деле действительно хорош для unit test, поскольку он имеет возможность создавать базы данных "на лету" из того, что определено в вашем DBML.
Это действительно приятно проверять уровень ORM, создавая БД через DataContext и пустую для начала.
Я расскажу об этом в своем блоге здесь: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx