Как люди тестируют код, использующий Linq to SQL? - PullRequest
53 голосов
/ 09 сентября 2008

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

Ответы [ 7 ]

14 голосов
/ 24 сентября 2008

Обновление:

Фредрик опубликовал пример решения о том, как выполнить модульное тестирование приложений linq2sql, в своем блоге. Вы можете скачать его по адресу:

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

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

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

* Я нашел эти блоги, которые я считаю хорошим началом для создания оболочки DataContext: Link1 Link2

Они охватывают почти одну и ту же тему, за исключением того, что в первом реализованы средства для извлечения интерфейсов для таблиц. Второй - более обширный, поэтому я включил и его. *

6 голосов
/ 20 февраля 2012

3 года с опозданием, но вот как я это делаю:

https://github.com/lukesampson/LinqToSQL-test-extensions/

Нет необходимости писать обертку или делать много сантехники, просто поместите шаблон T4 рядом с вашим .dbml, и вы получите:

  1. Интерфейс для вашего контекста данных, например IExampleDataContext
  2. Макет в памяти для вашего контекста данных, например 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
4 голосов
/ 09 сентября 2008

Оберните DataContext, а затем смоделируйте обертку. Это самый быстрый способ сделать это, хотя он требует кодирования для тестирования, которое некоторые люди считают запахом. Но иногда, когда у вас есть зависимости, которые нельзя (легко) высмеять, это единственный способ.

2 голосов
/ 10 сентября 2008

Mattwar на В Wayward Web Log была отличная статья о том, как макетировать расширяемый контекст данных Linq2Sql. Проверьте это - MOCKS NIX - ДОПОЛНИТЕЛЬНАЯ ССЫЛКА НА SQL DATACONTEXT

2 голосов
/ 09 сентября 2008

Linq значительно облегчает тестирование. Запросы Linq работают так же хорошо в списках, как и в Linq-to-sql. Вы можете поменять Linq на SQL для объектов списка и протестировать таким образом.

1 голос
/ 05 октября 2008

LINQ to SQL на самом деле очень хорош для модульного тестирования, поскольку он имеет возможность создавать базы данных на лету из того, что определено в вашем DBML.

Очень удобно тестировать слой ORM, создав БД через DataContext и сделав его пустым для начала.

Я освещаю это в своем блоге здесь: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx

1 голос
/ 09 сентября 2008

Обычно вам не нужно тестировать часть кода, которая использует LINQ to SQL, но если вы действительно этого хотите, вы можете использовать те же наборы данных, которые вы запрашиваете у сервера, и превратить их в объекты памяти и запускают запросы LINQ для этого (который будет использовать методы Enumerable вместо Queryable).

Другим вариантом является использование модели Мэтта Уоррена для DataContext .

.

Вы также можете получить операторы SQL, которые использует LINQ to SQL, получив их через отладчик (из объекта IQueryable), проверив их вручную, а затем включив в автоматизированные тесты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...