Подтвердить что ты не робот

VS 2010 Ошибка тестового Runner "Процесс агента был остановлен во время выполнения теста".

В Visual Studio 2010 у меня есть ряд модульных тестов. Когда я запускаю несколько тестов за один раз с использованием тестовых списков, иногда я обнаружил следующую ошибку для одного или нескольких тестов:

Процесс агента был остановлен, пока тест выполнялся.

Это никогда не будет ошибкой теста, и если я попытаюсь снова запустить тест, он преуспеет.

Я нашел этот отчет об ошибке в Connect, который, похоже, является той же проблемой, но он не предлагает решения.

Кто-нибудь еще видел это поведение? Как я могу избежать этого?

Изменить

Я все еще испытываю эту ошибку, и многие мои коллеги тоже работают на одной и той же программной/аппаратной настройке. Я оценил ответы до сих пор, но они не решают проблему. Я начинаю щедрость за решение этой проблемы.

4b9b3361

Ответ 1

Я только что испытал подобную проблему: некоторые тесты терпят неудачу, и они различны в разных тестовых прогонах. Я не знаю точно, почему это происходит, но это началось, когда я добавил финализатор к одному из моих классов. Когда я отключу финализатор, проблема исчезнет. Когда я включаю финализатор - проблема возвращается.

Сейчас я не знаю, как это преодолеть.

Ответ 2

Это сообщение вызвано исключением в потоке, отличном от исполняемого тестового потока. Все ответы до сих пор сводятся к этому простому объяснению. Известная ошибка в Visual Studio не отображает в этом случае никакой разумной информации.

Тест-драйв Visual Studios полностью дросселируется, если поток, отличный от исполняемого тестового потока, генерирует исключение: он проглатывается, а theres нет вывода, нет возможности перехватить и отладить, и нет ничего, кроме сгоревшего тлеющего беспорядка, который должен был unit test.

Ответ 3

У меня была эта проблема, и это оказалось проблемой в моем коде, который тестовая платформа не улавливала должным образом. Небольшой случайный рефакторинг оставил меня с этим кодом:

public void GetThingy()
{
    this.GetThingy();
}

Это, конечно, бесконечная рекурсия и вызвало исключение StackOverflowException (я думаю). Это вызвало ужас: "Процесс агента был остановлен во время теста."

Быстрый анализ кода показал мне проблему, и мои тесты теперь работают нормально. Надеюсь, что это поможет - возможно, стоит проверить код, ищущий проблемы, или, возможно, извлечь бит в консольное приложение и проверить, что он там работает правильно.

Ответ 4

Мне удалось найти источник моей проблемы, посмотрев файл результатов теста (/TestResults/*.trx). Он предоставил полную информацию об исключении, которое произошло в фоновом потоке, и как только я разрешил это исключение, "обработан обработанный агент остановлен..." ошибка исчезла.

В моем случае я непреднамеренно запускал графический интерфейс в моем unit test, который в итоге вызвал выброс System.ComponentModel.InvalidAsynchronousStateException.

Итак, файл .trx содержит:

   <RunInfo computerName="DT-1202" outcome="Error" timestamp="2013-07-29T13:52:11.2647907-04:00">
    <Text>One of the background threads threw exception: 
System.ComponentModel.InvalidAsynchronousStateException: An error occurred invoking the method.  The destination thread no longer exists.
at System.Windows.Forms.Control.WaitForWaitHandle(WaitHandle waitHandle)
at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
at System.Windows.Forms.Control.Invoke(Delegate method)
...
</Text>
  </RunInfo>

Это не предоставило никакой информации о том, какой тест вызвал ошибку, но он показал мне, где было исключение, что было очень полезно.

Ответ 5

Это сообщение обычно генерируется, когда процесс тестирования выходит из строя и может произойти, когда есть необработанное исключение в фоновом потоке, происходит переполнение стека или явный вызов Process.GetCurrentProcess().Kill() или Environment.Exit. Другой возможной причиной является нарушение доступа в неуправляемом коде.

Что-то, о чем никто не упоминал, заключается в том, что в журнале событий может быть дополнительная информация. Обычно вы не получите много информации о том, почему тест разбился в результатах, однако в случае необработанного исключения в фоновом потоке, тогда тестовая среда записывает данные в журнал событий приложения с источником VSTTExecution. Если в журнал событий нет информации, это, вероятно, одна из других причин, перечисленных выше.

Ответ 6

Я столкнулся с той же проблемой и решил ее, удалив

Environment.Exit(0);

Итак, я уверен, что эта ошибка возникает во время теста или тестируемого метода, что приводит к завершению процесса выполнения.

Ответ 7

Спасибо за сообщение вопроса. Я просто столкнулся с этой проблемой и выяснил причину, с которой вы можете столкнуться.

Асинхронное исключение может иметь произошло

Во время моей тестовой установки я создаю объект, который помещает рабочий поток в пул потоков. Если я проведу отладку достаточно быстро, мой код пройдет.

Если рабочий поток запускается и имеет ошибку, прежде чем установка теста завершается, я получаю результат Aborted без каких-либо аргументов.

Если рабочий поток запускается и имеет ошибку ПОСЛЕ начала теста, я получаю результат: Ошибка. Процесс агента был остановлен во время выполнения теста.

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

Надеюсь, что это поможет

Ответ 8

В моем случае решение было разрешено путем проверки окна вывода.

'QTAgent32.exe' (управляемый (v4.0.30319)): Загружено "C:\TestResults\bdewey_XXXXXX072 2011-01-11 17_00_40\Out\MyCode.dll", Загружены символы. E, 9024, 9, 2011/01/11, 17: 00: 46.827, XXXXX072\QTAgent32.exe, необработанный Исключение Уотсон: [Сообщение об исключении]

В моем случае у меня был FileSystemWatcher, который выдавал ошибку в отдельном потоке.

Ответ 9

Я добавил блоки try/catch в descructor ~ ClassName() {}, которые были определены в любом классе, участвующем в моих тестах. Это устранило проблему для меня.

~MyClass()
{
    try
    {
        // Some Code
    }
    catch (Exception e)
    {
        // Log the exception so it not totally hidden
        // Console.WriteLine(e.ToString());
    }
}

Ответ 10

Чтобы узнать, где было выбрано исключение, щелкните по гиперссылке "Ошибка тестового запуска" рядом с значком восклицания в окне результатов теста. Откроется окно с трассировкой стека.

Это помогает значительно отследить ошибку!

Ответ 11

У меня была такая же проблема, и это было вызвано финализатором для неуправляемого ресурса (файловый писатель, который по какой-то причине не был правильно настроен).

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

Ответ 12

У меня это случалось в странный случай, и преступник почти всегда оказывается нанизанным.

Как ни странно, все тесты будут хорошо работать на машинах разработки, а затем случайным образом выходят из строя на серверах сборки.

При ближайшем рассмотрении выяснилось, что хотя тесты были перечислены как переданные в dev-боксах, были исключены исключения. Исключения были брошены на отдельную нить, которая не попадалась в качестве ошибки.

Сведения о исключении регистрировались на тестовой трассе, поэтому мы смогли определить, какие коды/тесты необходимо изменить.

Надеюсь, это поможет кому-то.

Ответ 13

В моем случае у меня были некоторые модульные тесты для WCF-сервиса. Эта служба WCF запустила 2 таймера.
Эти таймеры вызвали побочные эффекты.
 - > Я отключил эти таймеры по умолчанию, и все в порядке!

BTW: я использую WCFMock, чтобы подделать службу WCF, поэтому у меня есть "реальные" модульные тесты вокруг моей службы WCF

Ответ 14

Эта ошибка была вызвана и Finalizer для меня.
Finalizer был actaully, называя некоторый код БД, который не был изделен. Потратил меня на то, чтобы найти его, поскольку это был не класс, который я написал, и ссылка на него была грубой довольно много классов.

Ответ 15

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

Я подозреваю, что проблема может заключаться в том, что DLL из моего другого проекта взяты из проекта Visual Studio 2012, и я запускаю свои тесты в проекте VS2010 и/или, возможно, что версии DLL UnitTestFramwork из двух проектов несовместимы.

Ответ 16

Проблема также может быть вызвана Exception или Stackoverflow в конструкторе TestClass.

Ответ 17

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

Если все ваши тесты прерываются, как описано в OP, причиной может быть неправильная конфигурация проекта. В моем случае целевая структура была установлена ​​в .NET Framework 3.5. Установка этой версии на более высокую версию на странице свойств проекта (вкладка Приложение) разрешила проблему.

Ответ 18

Я смог определить причину моей проблемы, просмотрев Журналы Windows > Записи журнала приложений в средстве просмотра событий Windows. Ищите записи в момент испытания бомбардировки. У меня была ошибка, похожая на приведенную ниже:

QTAgent32_40.exe, PID 10432, Thread 2) AgentProcess:CurrentDomain_UnhandledException: IsTerminating : System.NullReferenceException: Object reference not set to an instance of an object.
   at XXX.YYY.ZZZ.cs:line 660
   at XXX.YYY.AAA.Finalize() in C:\JenkinsSlave\workspace\XXX.YYY.AAA.cs:line 180

Это действительно было исключение нулевой ссылки в методе, вызываемом из финализатора класса.