VS 2010 Test Runner error «Процесс агента был остановлен во время выполнения теста». - PullRequest
97 голосов
/ 11 мая 2010

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

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

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

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

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

Редактировать

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

Ответы [ 18 ]

85 голосов
/ 09 сентября 2010

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

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

41 голосов
/ 25 мая 2010

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

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

16 голосов
/ 18 мая 2010

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

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

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

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

8 голосов
/ 29 июля 2013

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

В моем случае я непреднамеренно запускал графический интерфейс в моем модульном тесте, что в конечном итоге вызывало исключение 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 голосов
/ 06 февраля 2013

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

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

3 голосов
/ 24 ноября 2010

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

Environment.Exit(0);

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

2 голосов
/ 03 января 2014

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

~MyClass()
{
    try
    {
        // Some Code
    }
    catch (Exception e)
    {
        // Log the exception so it's not totally hidden
        // Console.WriteLine(e.ToString());
    }
}
2 голосов
/ 12 января 2011

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

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

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

2 голосов
/ 26 августа 2014

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

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

2 голосов
/ 13 мая 2010

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

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

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

Если рабочий поток запускается и имеет ошибку ДО завершения настройки теста, то я получаю результат Aborted без объяснения причин.

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

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

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

...