Partager via


Comment : définir des limites de temps pour l'exécution des tests

Mise à jour : novembre 2007

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 :

  • La définition des valeurs de délai d'attente pour des tests et des séries de tests s'effectue dans une configuration de série de tests. Pour plus d'informations sur les configurations de série de tests, consultez Comment : spécifier la configuration d'une série de tests et Comment : appliquer une configuration de série de tests. Comme avec tous les paramètres de configuration d'exécution, les paramètres de délai d'expiration sont appliqués à chaque fois que vous exécutez des tests pendant que cette configuration de série de tests est active.

  • Vous pouvez substituer la valeur du délai d'attente par test en définissant une propriété sur un test donné. Vous ne pouvez pas substituer la valeur du délai d'attente de série de tests.

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.

Pour définir le délai d'expiration de série 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 configuration de série de tests.

    La boîte de dialogue de configuration de série de tests s'affiche.

  3. Cliquez sur Délai 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. Cliquez sur Enregistrer, puis cliquez sur Fermer.

    Pour que ce paramètre entre en vigueur, la configuration de série de tests que vous avez modifiée doit être la configuration de série de tests active. Pour plus d'informations, consultez Comment : appliquer une configuration de série de tests.

Pour définir le délai d'expiration par test à l'aide de la configuration de série 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 configuration de série de tests.

    La boîte de dialogue de configuration de série de tests s'affiche.

  3. Cliquez sur Délai d'attente des tests.

  4. Sélectionnez Marquer un test comme ayant échoué si sa durée d'exécution dépasse :

  5. Définissez la valeur de délai d'attente par test, en heures, minutes et secondes.

  6. Cliquez sur Enregistrer, puis cliquez sur Fermer.

    Pour que ce paramètre entre en vigueur, la configuration de série de tests que vous avez modifiée doit être la configuration de série de tests active. Pour plus d'informations, consultez Comment : appliquer une configuration de série de tests.

Pour définir le délai d'expiration par test à l'aide d'une propriété de test

  1. Ouvrez l'Explorateur de tests ou la fenêtre Affichage de tests.

  2. Cliquez sur le test, puis appuyez sur F4.

    La fenêtre Propriétés s'ouvre et les propriétés de ce test sont affichées.

  3. Pour la propriété Timeout, définissez la valeur en heures, minutes et secondes.

    Remarque :

    La valeur du délai d'attente d'un test manuel est Infinie. Vous ne pouvez pas modifier cette valeur.

    Pour ce test uniquement, la valeur définie se substitue à la valeur du délai d'attente par test définie dans la configuration de série de tests. La valeur du délai d'attente de série de tests n'est pas affectée.

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 définie se substitue à la valeur du délai d'attente par test définie dans la configuration de série de tests. La valeur du délai d'attente de série de tests n'est pas affectée.

Voir aussi

Tâches

Comment : spécifier la configuration d'une série de tests

Comment : appliquer une configuration de série de tests