Mam zestaw działu Testy przebiegać równolegle (to jest ważne, że działa dobrze, jeśli badania są prowadzone jednowątkowy), który sprawia, że połączenia do WebClient aby pobrać zasób konsekwentnie trwa to 30 sekund, aby powrócić, a to powoduje, że test jednostek kończy się z jedną z następujących dwóch wiadomości:VS unittest - Temat był Przerwane
Wątek został przerwany.
Domena aplikacji, w której wątek był uruchomiony, została usunięta.
próbowałem ustawienie atrybutu [Timeout]
różne app.config
ustawienia, w tym nawet stworzenie EventWaitHandle
zrobić testów jednostkowych wątku oczekiwania na wątku WebClient, bez powodzenia. Sprawdziłem ustawienia Limit czasu testu w Ustawieniach testu i ustawiono domyślne wartości 30 minut.
Edit 2:
Jak wskazano @peer, jest to znany błąd w system testowania VS.Net: http://connect.microsoft.com/VisualStudio/feedback/details/587390/threadabortexception-when-running-two-tests-in-parallel-one-taking-40-seconds
Edit:
Oto najprostszy scenariusz, który odwzoruje problem. Czy możesz sprawić, by te testy jednostek przebiegały do końca, a jeśli tak, to w jaki sposób? Te testy muszą być wykonywane równolegle! Rozpocznij nowy projekt testu jednostki Visual Studio i użyj następujących ustawień i kodu metody testowej. Po uruchomieniu upewnij się, że faktycznie pracują równolegle (tzn. Będziesz potrzebował procesora z wieloma rdzeniami i sprawdź, czy działają one jednocześnie) Zauważyłem, że aby uruchomić je równolegle, muszę zastosować wszystkie ustawień, a następnie zamknij projekt i ponownie go otwórz, zanim zastosuje się proces równoległy).
Local.testsettings (dodaj parallelTestCount="#"
, co odnosi się do procesora):
<Description>These are default test settings for a local test run.</Description>
<Deployment enabled="false" />
<Execution parallelTestCount="4">
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
TraceAndTestImpact.testsettings (zakomentuj DataCollectors
):
<Description>These are test settings for Trace and Test Impact.</Description>
<Execution parallelTestCount="0">
<TestTypeSpecific />
<AgentRule name="Execution Agents">
<!--<DataCollectors>
<DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
</DataCollector>
<DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
</DataCollector>
<DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
</DataCollector>
<DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
</DataCollector>
</DataCollectors>-->
</AgentRule>
</Execution>
UnitTest1.cs (pierwszy test jednostki, śpi 35 sekund):
[TestMethod]
public void TestMethod1()
{
Thread.Sleep(35000);
// in default unit test settings, this line will never be reached
Console.WriteLine("TestMethod1");
}
UnitTest2.cs (test druga jednostka, śpi 35 sekund):
[TestMethod]
public void TestMethod2()
{
Thread.Sleep(35000);
// in default unit test settings, this line will never be reached
Console.WriteLine("TestMethod2");
}
Jeśli masz Zrównoleglanie prawidłowo ustawiony, można zauważyć, że oba testy nie powiedzie, z ThreadAbortException
, z jedna z dwóch wiadomości wyświetlanych u góry. Jak mogę powiedzieć, że te metody działają dłużej niż 30 sekund?
wydaje się działać dla mnie ... –
Myślę, że słuszne jest użycie ramy szyderczy jak Rhino lub Min drwić usługę internetową. Wywoływanie Ws w teście Jednostki nie jest dobrą praktyką – boca
@MikeGoatly: Odkryłem, że brakuje mi jakiegoś elementu. Działa to dobrze dla mnie, dopóki nie wykonam go równolegle, a następnie dostaję komunikaty o błędach. – mellamokb