что хороший путь состоит в том, чтобы записать модульным тестам с LINQ к SQL DAL?
В настоящее время я делаю некоторое тестирование базы данных и потребность создать вспомогательные методы, которые получают доступ к базе данных, но я не хочу те методы в своем основном repo's.
Таким образом, то, что я имею, является двумя копиями DAL, один в моем основном проекте и один в Тестовом проекте. Действительно ли легче управлять этими вещами, если я создаю отдельный проект для слоя данных? Я не уверен, каким путем является лучший способ приблизиться к этому.
Если бы я действительно создаю проект слоя данных, я переместил бы весь свой repo's в тот проект также? Я не уверен, как правильно установить слои.
Спасибо
Я использую Linq2Sql для своего уровня DAL, и он у меня как отдельный проект. В моем доменном проекте у меня есть интерфейс репозитория, который я затем реализую с помощью настраиваемого Linq2SqlCarRepository в моем проекте DAL, этот класс завершает сгенерированные классы Linq2Sql.
например. В проекте Car.Core
public interface ICarRepository
{
IQueryable<Car> GetAllCars();
void Add(Car);
}
у меня есть реализация интерфейса, который обеспечивает доступ к сгенерированному классу Linq2Sql.
Проект Car.Data
public class SqlCarRepository : ICarRepository
{
private CarDataContext _context;
public SqlCarRepository()
{
_context = new CarDataContext();
}
#region ICarRepository Members
public IQueryable<Car> GetAllCars()
{
return _context.Cars;
}
Затем у меня есть тестовый проект Car.Data.Test, который затем использует имитацию для имитации ICarRepository и выполняет тесты. Я думаю, это немного отличается от того, что вы описываете. Но я думаю, вы хотите попробовать отделить свой DAL от своего приложения, чтобы это периферийное устройство можно было заменить, если вы захотите.
У меня не все полностью рассортировано, но в настоящее время у меня есть следующие проекты:
Car.Core --- All the interfaces and domain objects, DTO's etc
Car.Core.Tests --- The tests of the core business logic.
Car.Web --- Asp.net MVC frontend
Car.Web.Tests --- Tests for the website
Car.Data --- The Linq2Sql stuff lives in here
Car.Data.Tests --- The tests for the DAL layer
Это то, что у меня есть сейчас, хотя, возможно, это не лучший способ делать что-то сейчас.
Я бы рекомендовал прочитать The Onion Architecture и посмотреть видео MVC StoreFront для вдохновения; удачи.
Я бы использовал паттерн репозитория, описанный в статье журнала Visual Studio за сентябрь 2009 года под названием "Устранение зависимостей от базы данных при разработке на основе тестирования". Я использую этот паттерн с момента прочтения статьи с большим успехом. Этот паттерн поможет отделить ваш слой данных и написать хорошие модульные тесты.
Это потребует от вас принятия n-уровневой архитектуры и создания отдельного слоя данных, но в долгосрочной перспективе это того стоит.
Вот ссылка на статью в Интернете. Шаблон репозитория