2010-08-09 15 views
1

Я пытаюсь найти в Visual Studio 2010 Unit Testing, как сохранить транзакцию данных, которые я либо добавил, обновил, либо удалил во время моих тестов, поэтому на моем TestCleanup я могу откатить их значения.Visual Studio 2010 Unit Testing

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

Приветствия

Пол

ответ

3

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

Edit:

Похоже, вы создали набор данных для тестирования и хотите, чтобы убедиться, что набор данных восстанавливается в исходное состояние. Я предпочитаю практиковать настройку тестовых данных как часть теста, но я понимаю, что может быть сложно для сложных тестов.

Если это в источнике данных ADO.NET, вы можете начать транзакцию, а затем отменить эту транзакцию в конце теста. Например:

using (var transaction = db.BeginTransaction()) 
{ 
    // Do tests here 
} 
// The transaction is rolled back when disposed 

Edit 2:

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

+0

Нет Я использую только тестовый набор данных. Если мой тест выполняет DELETE из тестовой базы данных, я действительно хочу откат тестового набора данных после того, как он успешно выполнил DELETE в его исходное состояние, чтобы использовать эти данные в другом тесте. –

+0

Я вижу. Другой подход, который вы можете предпринять, - создать тестовые данные, необходимые для теста, в качестве настройки для этого теста. – Jacob

1

Для тестирования модулей вам, вероятно, следует попробовать использовать mocks вместо доступа к тестовой базе данных. Единичные тесты обычно должны быть полностью автономными (и не полагаться на внешние источники, например, базы данных).

Если вы на самом деле тестирования запросов к базе, то это, вероятно, интеграционный тест, в этом случае вы можете:

  1. Создание тестовых данных в настройках
  2. Выполнить код
  3. тест Assert проходит
  4. Удалить данные теста, вставленные на этапе 1
+0

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

+0

Я бы сбросил шаг 4 и обеспечил, чтобы шаг один справился с данными, которых он не ожидает. –