2008-09-30 5 views
0

У меня есть вопрос: SO спрашивает, как подключить средний уровень к DataSet.Как отделить средний уровень и набор данных для модульного тестирования?

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

Как можно было бы отключить этот код для модульного тестирования?

Спасибо,
Keith

ответ

3

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

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

+0

Я согласен. В настоящее время у меня есть приложение, которое использует NHibernate, Castle Windsor и RhinoMock, и я очень доволен. Я использую шаблон хранилища и почти полностью отключается от DAL для моих модульных тестов. Никогда не хотел бы снова возвращаться к наборам данных – Tigraine

-2

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

RWendi

0

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

0

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

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

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

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

var order = repository.GetOrderBy(id); 

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

var dataset = orderDatabase.GetOrderAndDetailsBy(id); 

репозиторий может использовать строитель, чтобы создать заказ:

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset); 

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

var repository = new OrderRepository(orderDatabase, orderBuilder); 

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

1

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

Я рекомендую вам посмотреть dnrTV episode 126 с Джеймсом Ковачем.

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