Сервер сборки CC.Net - как найти тест NUnit, который вообще не завершается? - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть набор тестов из ~ 1500 тестов, и они обычно выполняются и заканчиваются в «разумное время».

Однако недавно я изменил части кода, чтобы использовать потоки - и теперь мои сборки время от времени терпят неудачу, просто из-за тайм-аута. Я предполагаю, что поток отказывается умирать, и сборка ожидает достижения максимального времени сборки.

Моя проблема в том, как определить, какой тест вызывает проблему?

Могу ли я активировать некоторые записи, показывающие, что тест начался / закончен? Конечно, я могу сделать это, вставив код в каждый метод тестирования - или просто во все приборы, но это МНОГО работы, которой я бы предпочел избежать.

1 Ответ

2 голосов
/ 13 декабря 2011

Я бы предложил обновить до NUnit 2.5 и украсить ваши тесты атрибутом Timeout , указав максимальное время выполнения теста. Например, вы можете поместить это в ваш AssemblyInfo.cs:

[assembly: NUnit.Framework.Timeout(100)] 

NUnit теперь запускает каждый тест в отдельном потоке и отменяет его, если он превышает свой временной интервал. Однако это может быть дорогостоящим, поэтому, вероятно, лучше определить длительные тесты, а затем удалить атрибут уровня сборки в пользу временных интервалов тестового крепления. Вы также можете переопределить это в отдельных тестах, выделив им больше времени для запуска.

Таким образом вы перемещаете обнаружение тайм-аута / зависания из CruiseControl.Net в NUnit и получаете в отчете информацию о задачах, которые не были выполнены должным образом. К сожалению, CC.Net не может получить эту информацию, когда ему нужно завершить процесс из-за тайм-аута.

...