Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Правильный способ поймать ошибку утверждения в NUnit

Автор вопроса: HiveHicksОтветов: 4

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

Итак, у меня есть код вроде:

var group = new ContactGroup { Name = UserLogin + "_test_group" };
group.ID = _provider.AddGroup(UserLogin, group);
Assert.That(_provider.GetGroup(UserLogin, group.ID), Is.Not.Null);
_provider.RemoveGroup(UserLogin, group.ID);

Дело в том, что в случае неудачного утверждения RemoveGroup не будет выполняться. Что я могу с этим поделать?

Если я попробую это:

var group = new ContactGroup { Name = UserLogin + "_test_group" };
group.ID = _provider.AddGroup(UserLogin, group);
try
{
    Assert.That(_provider.GetGroup(UserLogin, group.ID), Is.Not.Null);
}
finally
{
    _provider.RemoveGroup(UserLogin, group.ID);
}

я должен перебросить AssertionException, как это

catch (AssertionException)
{
    throw;
}

?

nunitassert

Ответы

Ответ 1 · рейтинг 5 · Lee

Один из способов справиться с очисткой в ​​тестах интеграции базы данных - выполнить тест в транзакции, которая затем откатывается после завершения теста.

Ответ 2 · рейтинг 1 · rgunawan

Используйте метод разрыва. Метод разрыва выполняется сразу после каждого теста.

   [TearDown]
    public void TearDown()
    {
       _provider.RemoveGroup(UserLogin, group.ID);
    }

Ответ 3 · рейтинг 1 · Ross Patterson

Вам вообще не нужно предложение at catch. В C# try {... throw ...} finally {...} выполнит предложение finally, а затем отправит исключение вверх по стеку ближайшему catch или в начало программы, если его нет. Таким образом

try {
    Assert.Fail("BOOM!");
} finally {
    Cleanup();
}

сделает именно то, что вы хотите: запустите Cleanup(), а затем умрите от утверждения.

Ответ 4 · Michael Lloyd Lee mlk

Специалисты DBUnit рекомендуют удалять истории при запуске, а не при завершении работы (Хорошая настройка не нуждается в очистке! а>) и это то, что я делаю. Таким образом, запуск теста удаляет любые данные, которые тест не ожидает.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы