Freigeben über


Gewusst wie: Erzwingen von Tests zum Beenden der Ausführung nach einer angegebenen Zeitspanne

Sie können Zeitlimits für die Ausführung eines Tests oder Testlaufs angeben.Dies ist z. B. erforderlich, wenn Sie in einer Testabteilung arbeiten und ein Testlauf zu einer bestimmten Tageszeit abgeschlossen sein muss.

Ein anderes Szenario für die Verwendung von Zeitlimits betrifft nicht reagierenden Code.Wenn bei einem Test ein nicht reagierender Codeabschnitt gefunden wird und Sie ein Test-Timeout verwenden, wird der entsprechende Test durch das Testlauf-Timeout beendet, sodass der Testlauf mit nachfolgenden Tests fortgesetzt werden kann.

Es gibt zwei Möglichkeiten, Zeitlimits festzulegen:

Sie können keine Test-Timeouts für bestimmte Testtypen festlegen.Test-Timeouts gelten nicht für manuelle Tests, doch Testlauf-Timeouts sind immer wirksam, auch bei Testläufen, die manuelle Tests enthalten.

Das Festlegen von Zeitlimits für Tests und Testläufe hat folgende Auswirkungen:

  • Wenn die Dauer eines Testlaufs den Timeoutwert erreicht, wird der Testlauf abgebrochen, auch wenn einige Tests noch nicht ausgeführt wurden.

  • Wenn die Dauer eines einzelnen Tests den Timeoutwert erreicht, wird die Ausführung dieses Tests beendet, und der Test wird mit Timeout gekennzeichnet.Der Testlauf wird mit dem nachfolgenden Test fortgesetzt.

Einfluss von Initialisierungsmethoden auf Test-Timeouts

Ein Testlauf kann eine AssemblyInitializeAttribute-Methode und eine ClassInitializeAttribute-Methode beinhalten.Wenn diese Methoden definiert sind, dauert deren Ausführung eine bestimmte Zeit, und anschließend wird der erste Test im Testlauf gestartet.

Die für die Initialisierungsmethoden benötigte Zeit wird zu der Zeit hinzuaddiert, die für den ersten Test aufgewendet wird.Dies kann als Formel mit folgenden Begriffen ausgedrückt werden:

  • Dt = Gesamtdauer

  • Dr = Ausführungsdauer eines Tests

  • I = Initialisierungsmethoden für die Assembly und die Klasse

  • Tn = Test, der an einer zufälligen Position in einem Testlauf ausgeführt wird

  • T1 = Test, der an der ersten Position in einem Testlauf ausgeführt wird

Folgendes gilt für alle Tests nach dem ersten Test:

Dt**[Tn] = Dr[Tn]**

Beachten Sie jedoch folgenden Fall:

Dt**[T1] = Dr[T1] + D[I]**

Dem ersten ausgeführten Test wurde möglicherweise ein Timeoutwert für einzelne Tests zugewiesen.In diesem Fall wird die Initialisierungszeit auf das Zeitlimit angerechnet, das für den ersten Test festgelegt wurde. Dies kann dazu führen, dass der Test fehlschlägt.

HinweisHinweis

Diese Einschränkung könnte nur bewirken, dass der erste Test fehlschlägt.Nachfolgende Tests im Testlauf sind nicht betroffen.

Wenn der Testlauf Initialisierungsmethoden enthält, könnten Sie diese Einschränkung auf folgende Weise umgehen: Wenden Sie auf jeden Test ein Timeout an, das länger als die gesamten erwarteten Ausführungszeiten für Testmethode und Initialisierungsmethoden ist.Dieser Schritt müsste für jeden Test ausgeführt werden.Da die Ausführungsreihenfolge der Tests bei Komponententests nicht vorgegeben ist, kann nicht vorhergesagt werden, welcher Test zuerst ausgeführt wird.

Einfluss von Bereinigungsmethoden auf Testlauf-Timeouts

Ein Testlauf kann eine AssemblyCleanupAttribute-Methode und eine ClassCleanupAttribute-Methode beinhalten.Nachdem diese Methoden abgeschlossen wurden, endet der Testlauf.

Möglicherweise wurde dem Testlauf ein Timeoutwert zugewiesen.Die von den Bereinigungsmethoden benötigte Zeit wird der Gesamtzeit hinzuaddiert, die für den Testlauf aufgewendet wird.Dies bedeutet, dass die Bereinigungszeit auf das Zeitlimit angerechnet wird, das Sie für die gesamte Testlaufausführung festgelegt haben. Dies kann dazu führen, dass der Testlauf ein Timeout verursacht.

Festlegen der Timeout-Zeitraum für alle Tests

Den Testlauf-Timeoutwert für alle Tests, die mit die Einstellungsdatei Tests festlegen

  1. Öffnen Sie den Projektmappen-Explorer.

  2. Doppelklicken Sie im Ordner Projektmappenelemente der Projektmappe auf die Datei mit den Testeinstellungen.

    Das Dialogfeld Konfigurationseinstellungen wird geöffnet.

  3. Wählen Sie Test-Timeouts.

  4. Aktivieren Sie Testlauf abbrechen, wenn die Gesamtausführungszeit folgenden Wert überschreitet:

  5. Geben Sie den Testlauf-Timeoutwert in Stunden, Minuten und Sekunden an.

  6. Wählen Sie Speichern und wählen Sie enge.

    Damit diese Einstellung wirksam wird, müssen die bearbeiteten Testeinstellungen die aktiven Testeinstellungen sein.Weitere Informationen finden Sie unter Gewusst wie: Auswählen der aktiven Testeinstellungen aus Microsoft Visual Studio.

Überschreiben Sie die pro-Timeoutwert auf einzelnen test

So legen Sie das Timeout für einzelne Tests mithilfe eines Komponententestattributs fest

  1. Öffnen Sie die Quellcodedatei eines Komponententests.

  2. Suchen Sie das TestMethod-Attribut des Tests.

  3. Fügen Sie das Timeout-Attribut und einen Parameter hinzu, der den Timeoutwert ausdrückt.

    Der Timeoutwert wird in Millisekunden ausgedrückt.

    Beispiel (Visual C#):

    [TestMethod(), Timeout(80)]
    public void MyTestMethod()
    {
    // test code
    }
    

    Beispiel (Microsoft Visual Basic):

    <TestMethod(), Timeout(80)> _
    Public Sub MyTestMethod()
    ' test code
    End Sub
    

    Der angegebene Wert überschreibt den in den Testeinstellungen festgelegten Timeoutwert nur für diesen Test.Dies hat keine Auswirkungen auf den Testlauf-Timeoutwert.

Siehe auch

Aufgaben

Gewusst wie: Auswählen der aktiven Testeinstellungen aus Microsoft Visual Studio