Gewusst wie: Festlegen von Zeitlimits für die Ausführung von Tests

Aktualisiert: November 2007

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:

  • Die Timeoutwerte für Tests und Testläufe werden in einer Testlaufkonfiguration festgelegt. Weitere Informationen zu Testlaufkonfigurationen finden Sie unter Gewusst wie: Angeben einer Testlaufkonfiguration und Gewusst wie: Übernehmen einer Testlaufkonfiguration. Wie bei allen Testlauf-Konfigurationseinstellungen sind die Timeouteinstellungen bei jedem Ausführen von Tests wirksam, solange diese Testlaufkonfiguration aktiv ist.

  • Sie können den Timeoutwert für einzelne Tests überschreiben, indem Sie eine Eigenschaft für einen einzelnen Test festlegen. Der Testlauf-Timeoutwert kann nicht überschrieben werden.

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.

Hinweis:

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.

So legen Sie einen Testlauf-Timeoutwert fest

  1. Öffnen Sie den Projektmappen-Explorer.

  2. Doppelklicken Sie im Ordner Projektmappenelemente der Projektmappe auf die Testlaufkonfigurationsdatei.

    Das Dialogfeld Testlaufkonfiguration wird geöffnet.

  3. Klicken Sie auf 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. Klicken Sie auf Speichern und dann auf Schließen.

    Damit diese Einstellung wirksam wird, muss die bearbeitete Testlaufkonfiguration die aktive Testlaufkonfiguration sein. Weitere Informationen finden Sie unter Gewusst wie: Übernehmen einer Testlaufkonfiguration.

So legen Sie das Timeout für einzelne Tests unter Verwendung der Testlaufkonfiguration fest

  1. Öffnen Sie den Projektmappen-Explorer.

  2. Doppelklicken Sie im Ordner Projektmappenelemente der Projektmappe auf die Testlaufkonfigurationsdatei.

    Das Dialogfeld Testlaufkonfiguration wird geöffnet.

  3. Klicken Sie auf Test-Timeouts.

  4. Aktivieren Sie Einzelnen Test als fehlerhaft kennzeichnen, wenn die Ausführungszeit folgenden Wert überschreitet:

  5. Geben Sie den Timeoutwert für einzelne Tests in Stunden, Minuten und Sekunden an.

  6. Klicken Sie auf Speichern und dann auf Schließen.

    Damit diese Einstellung wirksam wird, muss die bearbeitete Testlaufkonfiguration die aktive Testlaufkonfiguration sein. Weitere Informationen finden Sie unter Gewusst wie: Übernehmen einer Testlaufkonfiguration.

So legen Sie das Timeout für einzelne Tests über eine Testeigenschaft fest

  1. Öffnen Sie den Testlisten-Editor oder das Fenster Testansicht.

  2. Klicken Sie auf den Test, und drücken Sie dann F4.

    Das Eigenschaftenfenster wird geöffnet, und es werden die Eigenschaften für diesen Test angezeigt.

  3. Geben Sie für die Timeout-Eigenschaft den Wert in Stunden, Minuten und Sekunden an.

    Hinweis:

    Der Timeoutwert für einen manuellen Test ist Unendlich. Dieser Wert kann nicht geändert werden.

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

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 der Testlaufkonfiguration festgelegten Timeoutwert nur für diesen Test. Dies hat keine Auswirkungen auf den Testlauf-Timeoutwert.

Siehe auch

Aufgaben

Gewusst wie: Angeben einer Testlaufkonfiguration

Gewusst wie: Übernehmen einer Testlaufkonfiguration