Partager via


Comment : forcer l'arrêt des tests après l'expiration d'un certain délai.

Vous pouvez définir des limites de temps qui seront respectées par l'exécution d'un test ou d'une série de tests.Cela peut s'avérer nécessaire par exemple si vous travaillez dans un environnement de test et que vous avez besoin d'une série de tests se termine avant une certaine heure de la journée.

Un autre scénario d'utilisation des limites de temps est celui du code non réactif.Si un test rencontre une section de code qui ne répond pas, l'utilisation d'un délai d'expiration de test et d'un délai d'expiration de série de tests permet au test en question de se terminer de sorte que la série de tests puisse continuer avec les tests suivants.

Il existe deux façons de définir des limites de temps :

Vous ne pouvez pas définir de délais d'expiration de test pour des types de tests spécifiques.Les délais d'expiration de test ne s'appliquent pas aux tests manuels, mais les délais d'expiration de série de tests sont toujours appliqués, même pour les séries de tests qui contiennent des tests manuels.

La définition de limites de temps pour les tests et les séries de tests a les effets suivants :

  • Lorsque la durée d'une série de tests atteint sa valeur de délai d'attente, la série de tests est abandonnée, même si certains tests n'ont pas été exécutés.

  • Lorsque la durée d'un test individuel atteint sa valeur de délai d'attente, l'exécution de ce test s'arrête et le test porte la mention Dépassement de délai.La série de tests se poursuit avec le test suivant.

Comment les méthodes d'initialisation affectent les délais d'expiration de test

Une série de tests peut inclure une méthode AssemblyInitializeAttribute et une méthode ClassInitializeAttribute.Si ces méthodes sont définies, elles nécessiteront une durée finie pour s'exécuter, puis le premier test de la série de tests commencera.

Le délai employé par les méthodes d'initialisation est ajouté au délai employé par le premier test.Nous pouvons l'exprimer sous la forme d'une formule utilisant ces termes :

  • Dt = durée totale

  • Dr = durée pendant laquelle un test s'exécute

  • I = méthodes d'initialisation pour l'assembly et la classe

  • Tn = test qui s'exécute à un emplacement aléatoire dans une série de tests

  • T1 = test qui s'exécute à la première place dans une série de tests

Ce qui suit s'applique pour tous les tests après le premier :

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

Mais veuillez noter le cas suivant :

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

Le premier test qui s'exécute peut se voir affecter une valeur de délai d'attente par test.Dans ce cas, la durée d'initialisation prend en compte la limite de temps imposée sur le premier test et pourrait par conséquent entraîner l'échec de ce test.

[!REMARQUE]

Cette limitation pourrait entraîner uniquement l'échec du premier test.Les tests suivants de la série de tests sont non affectés.

Si votre série de tests inclut des méthodes d'initialisation, vous pouvez contourner cette limitation de la manière suivante : appliquez à chaque test un délai d'expiration supérieur à la somme des durées d'exécution attendues pour la méthode de test et toutes les méthodes d'initialisation.Vous devriez l'appliquer pour chaque test.Compte tenu que le test unitaire ne garantit pas l'ordre dans lequel s'exécutent les tests, vous ne pouvez pas prédire quel test s'exécutera en premier.

Comment les méthodes Cleanup affectent les délais d'attente de série de tests

Une série de tests peut inclure une méthode AssemblyCleanupAttribute et une méthode ClassCleanupAttribute.Une fois ces méthodes exécutées, la série de tests prend fin.

La série de tests peut se voir affecter une valeur de délai d'attente.La durée employée par les méthodes Cleanup est ajoutée à la durée totale employée par la série de tests.En d'autres termes, la durée de nettoyage prend en compte la limite de temps que vous avez imposée sur la série de tests dans son intégralité et pourrait par conséquent entraîner un dépassement de délai de la série de tests.

Configurer des délais d'attente pour tous les tests

Pour définir le délai d'attente de série de tests pour tous les tests à l'aide du fichier de paramètres de tests

  1. Ouvrez l' Explorateur de solutions.

  2. Dans le dossier Éléments de solution de votre solution, double-cliquez sur le fichier de paramètres de test.

    La boîte de dialogue Paramètres de configuration apparaît.

  3. Choisissez Délais d'attente des tests.

  4. Sélectionnez Abandonner une série de tests si sa durée d'exécution totale dépasse :

  5. Définissez la valeur de délai d'attente de série de tests, en heures, minutes et secondes.

  6. Sélectionnez Sauvegarder puis Fermer.

    Pour que ce paramètre soit appliqué, les paramètres de test que vous avez modifiés doivent être actifs.Pour plus d’informations, consultez Comment : sélectionner des paramètres de test actifs à partir de Microsoft Visual Studio.

Remplacez la valeur du délai d'attente par test dans le test individuel

Pour définir le délai d'attente par test à l'aide d'un attribut de test unitaire

  1. Ouvrez le fichier de code source d'un test unitaire.

  2. Recherchez l'attribut TestMethod du test.

  3. Ajoutez l'attribut Timeout et un paramètre qui exprime la valeur du délai d'attente.

    La valeur du délai d'attente est exprimée en millisecondes.

    Exemple (Visual C#) :

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

    Exemple (Microsoft Visual Basic) :

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

    Pour ce test uniquement, la valeur que vous définissez substitue la valeur du délai d'attente par test configurée dans les paramètres de test.La valeur du délai d'attente de série de tests n'est pas affectée.

Voir aussi

Tâches

Comment : sélectionner des paramètres de test actifs à partir de Microsoft Visual Studio