Поблочное тестирование с Уровнем доступа к данным

что хороший путь состоит в том, чтобы записать модульным тестам с LINQ к SQL DAL?

В настоящее время я делаю некоторое тестирование базы данных и потребность создать вспомогательные методы, которые получают доступ к базе данных, но я не хочу те методы в своем основном repo's.

Таким образом, то, что я имею, является двумя копиями DAL, один в моем основном проекте и один в Тестовом проекте. Действительно ли легче управлять этими вещами, если я создаю отдельный проект для слоя данных? Я не уверен, каким путем является лучший способ приблизиться к этому.

Если бы я действительно создаю проект слоя данных, я переместил бы весь свой repo's в тот проект также? Я не уверен, как правильно установить слои.

Спасибо

13
задан chobo 5 May 2010 в 18:32
поделиться

2 ответа

Я использую 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 для вдохновения; удачи.

5
ответ дан 2 December 2019 в 01:09
поделиться

Я бы использовал паттерн репозитория, описанный в статье журнала Visual Studio за сентябрь 2009 года под названием "Устранение зависимостей от базы данных при разработке на основе тестирования". Я использую этот паттерн с момента прочтения статьи с большим успехом. Этот паттерн поможет отделить ваш слой данных и написать хорошие модульные тесты.

Это потребует от вас принятия n-уровневой архитектуры и создания отдельного слоя данных, но в долгосрочной перспективе это того стоит.

Вот ссылка на статью в Интернете. Шаблон репозитория

6
ответ дан 2 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: