Как отделить средний уровень и набор данных, чтобы можно было проводить модульное тестирование? - PullRequest
0 голосов
/ 30 сентября 2008

У меня есть вопрос на SO , спрашивающий, как подключить средний уровень к DataSet.

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

Как этот код был бы разъединен, чтобы учесть модульное тестирование?

Спасибо,
Кит

Ответы [ 5 ]

3 голосов
/ 14 октября 2008

ИМО; DataSets - это зло. Они являются и должны использоваться только как автономные базы данных. Ничего больше, ИМО. Однако то, что вы делаете на уровне доступа к данным (DAL), на самом деле не должно влиять на уровень вашего бизнеса (BL). Я бы просто использовал объекты (используя интерфейсы) между ними (IList), а затем использовал бы интерфейс для определения вашего DAL (IRepository), и вы можете смоделировать этот интерфейс, чтобы вернуть все, что вам нужно в вашем BL для модульного тестирования. Модульное тестирование Наборы данных - еще один зверь, никогда не пробовал, и я надеюсь, что никогда не придется ... Возможно, база данных в памяти - ваш лучший выбор там ...

О, и для насмешек я использовал RhinoMock с некоторым успехом. Я также призываю вас взглянуть на IoC (http://www.castleproject.org/).

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

Вам нужны IOC (инверсия управления) и макет объектов.

Я призываю вас посмотреть эпизод dnrTV 126 с Джеймсом Ковачем.

Он демонстрирует именно то, что вы ищете.

0 голосов
/ 26 октября 2008

Это зависит от того, что вы хотите проверить:

  • Хотите проверить получение данных из базы данных?
  • Создание объектов из наборов данных?
  • Вставить или обновить базу данных?
  • И так далее ...

Вот предложение:

Орден содержит всех своих детей. Это совокупность, единое целое. Вы получаете заказ с подробностями из хранилища:

var order = repository.GetOrderBy(id);

Хранилище получает данные из базы данных:

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

Хранилище может использовать строитель для создания заказа:

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

Вам потребуется создать хранилище следующим образом:

var repository = new OrderRepository(orderDatabase, orderBuilder);

Теперь вы можете создать репозиторий с поддельными соавторами, в зависимости от того, что вы хотите протестировать.

0 голосов
/ 30 сентября 2008

Вы пробовали Spring.net ? Это сделает ваш код чище и менее связанным. Он также предоставляет полезных классов для проведения интеграционных тестов.

0 голосов
/ 30 сентября 2008

Если у вас есть объекты сущностей, вы можете использовать mocks для модульного тестирования вашего среднего уровня.

RWendi

...