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:
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%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.
Und du würdest sie in deinem Test (im Akt oder Assert Teil des Tests) so zusammenbauen
%Vor% 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.
Für mein Visual Studio 2010 hat nur die folgende Konfiguration Tests durchgeführt.
%Vor%Tags und Links c# unit-testing mstest waithandle