2011-02-04 2 views
5

У меня есть набор тестовых примеров MSTest, которые используют методы с этими атрибутами для удаления всех строк из таблиц в тестовой базе данных, созданной после запуска тестов; время от времени я получаю строку из одного из модульных тестов, все еще находящихся в БД.При каких обстоятельствах [ClassCleanup] и [TestCleanup] не выполняются

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

+0

Вы имеете в виду NUnit, MSTest или другую структуру тестирования? – adamjford

ответ

4

Ну, во-первых, «единичный тест» технически не должен касаться БД. Но я тоже использую NUnit для своих интеграционных тестов, так что не biggie.

Единственные обстоятельства, при которых методы очистки не будут выполняться полностью, - это если в функции очистки была ошибка, или исключение вызвало остановку среды выполнения. Единственные, что я знаю, могут сделать это переполнение стека и ошибки вне памяти. Отмена теста от отладчика также приведет к пропущению фазы очистки.

Более вероятное объяснение, в зависимости от уровня доступа к данным, заключается в том, что вы потеряли соединение с БД, а функция очистки не может получить новую. Это, как правило, указывает на необходимость сделать ваш DAL более надежным, а также указывает на то, что что-то, чего вы не ожидаете, происходит в тесте, чтобы заставить DAL сломаться.

+0

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

+0

Как «глупые» правила для различных уровней тестирования зависят от вашей рабочей культуры. В большинстве случаев ключевое различие заключается в том, что модульные тесты выполняются очень быстро, поэтому их можно запускать при каждой проверке при использовании сервера CI. Я видел интегрированные тестовые комплекты, которые занимают часы, и в любом случае вы обычно запускаете их реже. – KeithS

1

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

Смежные вопросы