Wie verwende ich WaitHandler.WaitAll in MSTest ohne STA-Warnungen?

8

Gibt es eine Möglichkeit, Unit WaitHandle.WaitAll() zu testen, wenn Sie die integrierte Unit-Test-Lösung von Visual Studio verwenden? Wenn ich versuche, einen Test auszuführen, der diese Funktion in Visual Studio verwendet, schlägt der Test fehl, und beim Überprüfen der Testergebnisse wird der folgende Fehler angezeigt:

%Vor%

Ich möchte die Verwendung von WaitAll() in der Unit testen können, da sich ein zunehmender Teil der Code-Basis meiner API jetzt in ein IAsyncResult -Muster verlagert, im Gegensatz zu anderen Methoden, Multithread-Operationen durchzuführen.

Bearbeiten

Basierend auf dem Vorschlag von Anthony ist hier eine einfache Hilfsmethode, die verwendet werden kann, um solchen Code in einer Komponententestumgebung aufzurufen:

%Vor%     
RobV 14.07.2010, 12:46
quelle

4 Antworten

7

Sie haben möglicherweise zwei Probleme. Der erste ist der, den Sie angegeben haben: Sie können nicht auf mehrere Wait Handles in einem STA-Thread warten (der MSTest-Thread-Apartment-Status). Wir können das mit einem manuell erstellten MTA-Thread beheben.

%Vor%

Die Umgebung hat auch eine Maximales Warte-Handle-Limit . In .NET 2.0 scheint es so zu sein, dass es fest auf 64 codiert ist. Wenn auf mehr als das Limit gewartet wird, wird ein NotSupportedException erzeugt. Sie können eine Erweiterung -Methode verwenden, um auf alle Wartehandles in Chunks zu warten.

%Vor%

Und du würdest sie in deinem Test (im Akt oder Assert Teil des Tests) so zusammenbauen

%Vor%     
Anthony Mastrean 14.07.2010, 14:24
quelle
2

In Visual Studio 2008 & amp; 2010 können Sie Ihre .testsettings -Datei ändern, um die Tests unter einem MTA-Thread auszuführen, indem Sie <ExecutionThread apartmentState="MTA" /> hinzufügen.

%Vor%     
row1 23.05.2012 03:38
quelle
0

Für mein Visual Studio 2010 hat nur die folgende Konfiguration Tests durchgeführt.

%Vor%     
Roman Denysenko 28.08.2012 13:33
quelle
0

Bei VS2008 weichen die Anweisungen geringfügig von VS2010 ab. Bearbeiten Sie für VS2008 die Datei testrunconfig, und fügen Sie dem Element TestRunConfiguration Folgendes hinzu:

%Vor%     
Polyfun 04.06.2014 14:51
quelle

Tags und Links