Метод MsTest TestCleanup не вызывается, когда генерируется необработанное исключение
У меня есть тест, который использует внешнюю сборку для доступа к функциям пользовательского интерфейса в тестируемом приложении. Эта сборка выдает исключение из собственного пользовательского типа, если пользовательский интерфейс не находится в соответствующем состоянии.
Я установил метод TestCleanup, который убивает процесс приложения (в то время как TestInitialize запускает его), так что после завершения тестового прогона пользовательский интерфейс перезапускается с чистым состоянием.
Это хорошо работает при обычных условиях, однако, всякий раз, когда вызывается исключение из ссылочной сборки, оно никогда не попадает в метод очистки и не переходит прямо к следующему тесту. Этого не происходит с исключениями, которые выбрасываются из самого теста, например AssertFailedException. Я даже попытался выбросить базовое исключение из теста, и он попал в метод очистки.
Ответы
Ответ 1
Если исключение не обнаружено в TestInitialize, TestCleanup не будет вызываться.
Ответ 2
Это, к сожалению, расходится с тем, как С# обрабатывает исключения в конструкторах: когда это происходит, вызывается finalizer.