При написании автоматических тестов для тестирования сайтов я использовал многопоточность. Об этом я рассказывал в своей предыдущей статье. Однако реализовав описанное в предыдущей статье, я столкнулся с проблемой, когда NUnit agent вываливался с ошибкой «NUnit Agent has stopped working».

Подробности ошибки:

Problem signature:
Problem Event Name:	CLR20r3
Problem Signature 01:	nunit-agent-x86.exe
Problem Signature 02:	3.6.1.0
Problem Signature 03:	58bdfcf6
Problem Signature 04:	System
Problem Signature 05:	4.6.1087.0
Problem Signature 06:	583e5c41
Problem Signature 07:	9ef
Problem Signature 08:	21a
Problem Signature 09:	OpenQA.Selenium.WebDriver
OS Version:	6.3.9600.2.0.0.272.7
Locale ID:	1033
Additional Information 1:	5861
Additional Information 2:	5861822e1919d7c014bbb064c64908b2
Additional Information 3:	6ee2
Additional Information 4:	6ee2432e64e99bdcea5e4be767a3b1a2

Я не мог понять в чём проблема. У меня сразу возникла первая мысль, что многопоточность с тестами не совместима. Но я её отбросил как глупую. В русскоязычном интернете информацию по поводу падения NUnit agent не нашёл. Тогда начал изучать англоязычные ресурсы.

В процессе изучения выяснил, что это возникает из-за того, когда в процессе работы в отдельном потоке возникает ошибка, происходит аварийное завершение работы приложения и в итоге это выглядит так как будто это возникла проблема с NUnit agent и он «падает» с ошибкой. Т.е. ошибка, допущенная в коде C# или исключение, которое возникает в процессе работы приложения на C# приводит к «падению» приложения и как итог «падает» и NUnit agent. И самое печальное, что сообщение об ошибке не будет выведено на экран средствами .Net и мы остаёмся в неведении.

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