VS UnitTest - Поток был прерван

У меня есть набор модульных тестов , запускаемых параллельно ( это важно, он отлично работает, если тесты выполняются в однопоточном режиме ), который вызывает WebClient для загрузки ресурса, возврат которого постоянно занимает более 30 секунд, и это приводит к принудительному завершению модульного теста с одним из следующих двух сообщений:

Поток был прервано.

Домен приложения, в котором выполнялся поток, был выгружен.

Я попытался установить атрибут [Timeout] , различные параметры app.config , включая даже создание EventWaitHandle , чтобы заставить поток модульного тестирования ждать в потоке WebClient, без удача. Я проверил настройки времени ожидания теста в разделе «Параметры теста», и по умолчанию установлено значение 30 минут.


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

Как указано @peer, это известная ошибка в тестовой платформе VS.Net: http://connect.microsoft.com / VisualStudio / feedback / details / 587390 / threadabortexception-when-running-two-tests-in-parallel-one-take-40-seconds

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

Вот простейший сценарий, который воспроизводит проблему. Можете ли вы довести эти модульные тесты до завершения, и если да, то как? Эти тесты должны выполняться параллельно! Запустите новый проект Visual Studio Unit Test и используйте следующие параметры и код метода тестирования. При запуске убедитесь, что они действительно работают параллельно (т. Е. Вам понадобится процессор с несколькими ядрами, и убедитесь, что они работают одновременно. Я обнаружил, что для их параллельной работы я должен применить все настройки, затем закройте проект и снова откройте его, прежде чем будет применено распараллеливание).

Local.testsettings (добавьте parallelTestCount = "#" , независимо от того, что применимо к вашему процессору):

These are default test settings for a local test run.


  
  
  

TraceAndTestImpact.testsettings (закомментируйте DataCollectors ):

These are test settings for Trace and Test Impact.

  
  
    
  

UnitTest1.cs (первый модульный тест, спит 35 секунд):

[TestMethod]
public void TestMethod1()
{
    Thread.Sleep(35000);
    // in default unit test settings, this line will never be reached
    Console.WriteLine("TestMethod1");
}

UnitTest2.cs ( второй модульный тест, спит 35 секунд):

[TestMethod]
public void TestMethod2()
{
    Thread.Sleep(35000);
    // in default unit test settings, this line will never be reached
    Console.WriteLine("TestMethod2");
}

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

7
задан mellamokb 1 July 2011 в 16:00
поделиться