Как тестовые среды останавливают выполнение запущенных тестов?
Я реализую свой собственный тестовый фреймворк в.NET и столкнулся с проблемой, как правильно остановить выполнение работающего теста. Выполняемый тестовый метод явно не взаимодействует, поэтому я не могу использовать CancellationTokenSource, а Thread.Abort() устарел. Как существующие тестовые среды, такие как NUnit, справляются с этим?
1 ответ
После быстрого прочтения исходного кода, кажется, что Thread.Abort()
это механизм выбора. Это имеет смысл на первый взгляд, так как бегун должен выполнить произвольный код, а затем немедленно убить его.
Если посмотреть на источник NUnit (v3), когда указано значение тайм-аута, тест вынуждается в отдельный поток. Затем, если тест превышает значение тайм-аута, он прерывается с помощью вызова Thread.Abort()
,
Аналогично для MbUnit (v3), он запускает тест в отдельном потоке, используя песочницу, которая создает System.Threading.Timer
, Когда этот таймер истекает, он вызывает Abort()
на песочнице, которая вызывает Thread.Abort()
на беговом тесте.
Также по справочному источнику я не вижу Thread.Abort()
помечены как устаревшие / устаревшие.