У меня есть набор модульных тестов , запускаемых параллельно ( это важно, он отлично работает, если тесты выполняются в однопоточном режиме ), который вызывает 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 секунд ??