Правильный способ отловить ошибку утверждения в NUnit - PullRequest
1 голос
/ 28 июля 2010

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

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

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;
}

Ответы [ 4 ]

4 голосов
/ 28 июля 2010

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

1 голос
/ 28 июля 2010

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

   [TearDown]
    public void TearDown()
    {
       _provider.RemoveGroup(UserLogin, group.ID);
    }
0 голосов
/ 28 сентября 2011

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

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

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

0 голосов
/ 28 июля 2010

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

...