Подтвердить что ты не робот

Как люди тестируют код, который использует Linq to SQL

Как люди тестируют код, который использует Linq для SQL?

4b9b3361

Ответ 1

Update:

Fredrik поставил пример решения о том, как сделать приложения unit test linq2sql в своем блоге. Его можно загрузить по адресу:

http://web.archive.org/web/20120415022448/http://iridescence.no/post/DataContext-Repository-Pattern-Example-Code.aspx

Не только я считаю своим замечательным, что он опубликовал пример решения, ему также удалось извлечь интерфейсы для всех классов, что делает дизайн более развязанным.

Мой старый пост:

* Я нашел эти блоги, которые, я думаю, являются хорошим началом для создания оболочки 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, а затем обманите обертку. Его самый быстрый способ сделать это, для этого требуется кодирование для тестирования, которое некоторые люди считают запахами. Но иногда, когда у вас есть зависимости, которые невозможно (легко) издеваться, это единственный способ.

Ответ 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