Как тестовые среды останавливают выполнение запущенных тестов?

Я реализую свой собственный тестовый фреймворк в.NET и столкнулся с проблемой, как правильно остановить выполнение работающего теста. Выполняемый тестовый метод явно не взаимодействует, поэтому я не могу использовать CancellationTokenSource, а Thread.Abort() устарел. Как существующие тестовые среды, такие как NUnit, справляются с этим?

1 ответ

После быстрого прочтения исходного кода, кажется, что Thread.Abort() это механизм выбора. Это имеет смысл на первый взгляд, так как бегун должен выполнить произвольный код, а затем немедленно убить его.

Если посмотреть на источник NUnit (v3), когда указано значение тайм-аута, тест вынуждается в отдельный поток. Затем, если тест превышает значение тайм-аута, он прерывается с помощью вызова Thread.Abort(),

Аналогично для MbUnit (v3), он запускает тест в отдельном потоке, используя песочницу, которая создает System.Threading.Timer, Когда этот таймер истекает, он вызывает Abort() на песочнице, которая вызывает Thread.Abort() на беговом тесте.

Также по справочному источнику я не вижу Thread.Abort() помечены как устаревшие / устаревшие.

Другие вопросы по тегам