Partager via


ExpectedExceptionBaseAttribute, classe

Classe de base pour des attributs qui spécifient d'attendre une exception d'un test unitaire.

Hiérarchie d'héritage

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionBaseAttribute
      Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute

Espace de noms :  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly :  Microsoft.VisualStudio.QualityTools.UnitTestFramework (dans Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Syntaxe

'Déclaration
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False, Inherited := True)> _
Public MustInherit Class ExpectedExceptionBaseAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public abstract class ExpectedExceptionBaseAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false, Inherited = true)]
public ref class ExpectedExceptionBaseAttribute abstract : public Attribute
[<AbstractClass>]
[<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false, Inherited = true)>]
type ExpectedExceptionBaseAttribute =  
    class
        inherit Attribute
    end
public abstract class ExpectedExceptionBaseAttribute extends Attribute

Le type ExpectedExceptionBaseAttribute expose les membres suivants.

Constructeurs

  Nom Description
Méthode protégée ExpectedExceptionBaseAttribute() Initialise une nouvelle instance de la classe ExpectedExceptionBaseAttribute.
Méthode protégée ExpectedExceptionBaseAttribute(String) Initialise une nouvelle instance de la classe ExpectedExceptionBaseAttribute.

Début

Propriétés

  Nom Description
Propriété protégée NoExceptionMessage Infrastructure.
Propriété protégée TestContext Infrastructure.
Propriété publique TypeId Lors de son implémentation dans une classe dérivée, obtient un identificateur unique pour Attribute. (Hérité de Attribute.)

Début

Méthodes

  Nom Description
Méthode publique Equals Infrastructure. Retourne une valeur indiquant si cette instance équivaut à un objet spécifié. (Hérité de Attribute.)
Méthode protégée Finalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publique GetHashCode Retourne le code de hachage pour cette instance. (Hérité de Attribute.)
Méthode publique GetType Obtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode publique IsDefaultAttribute En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée. (Hérité de Attribute.)
Méthode publique Match En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié. (Hérité de Attribute.)
Méthode protégée MemberwiseClone Crée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode protégée RethrowIfAssertException Lève de nouveau l'exception si c'est un AssertFailedException ou un AssertInconclusiveException.
Méthode publique ToString Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.)
Méthode protégée Verify Infrastructure.

Début

Implémentations d'interface explicite

  Nom Description
Implémentation d'interface expliciteMéthode privée _Attribute.GetIDsOfNames Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch. (Hérité de Attribute.)
Implémentation d'interface expliciteMéthode privée _Attribute.GetTypeInfo Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface. (Hérité de Attribute.)
Implémentation d'interface expliciteMéthode privée _Attribute.GetTypeInfoCount Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1). (Hérité de Attribute.)
Implémentation d'interface expliciteMéthode privée _Attribute.Invoke Fournit l'accès aux propriétés et aux méthodes exposées par un objet. (Hérité de Attribute.)

Début

Notes

En implémentant votre propre vérification d'exception attendue. vous pouvez définir des informations supplémentaires et des spécifications que les méthodes intégrées de la classe ExpectedExceptionAttribute ne peuvent pas traiter, comme l'indique l'exemple suivant :

  • Vérification de l'état de l'exception.

  • Attente de plusieurs types d'exception.

  • Affichage d'un message personnalisé lorsqu'un type d'exception incorrect est jeté.

  • Contrôle du résultat d'un test négatif.

  • Pour plus d'informations sur l'utilisation d'attributs, consultez Extension des métadonnées à l'aide des attributs.

Exemples

La classe suivante contient la méthode à tester.

using System;

namespace CSExample
{
    public class DivisionClass
    {
        private int fraction;

        public int Divide(int numerator, int denominator)
        {
            return numerator / denominator;
        }
    }
}

La classe d'attributs personnalisée suivante, ExpectedArithmeticException, dérive de la classe ExpectedExceptionBaseAttribute pour vérifier un type et un message d'exception. L'attribut ExpectedArithmeticException vérifie qu'une méthode de test lève une exception d'un type qui est ou qui dérive de System.ArithmeticException. Il vérifie également que le message d'exception correspond au message d'exception spécifié. Le test unitaire aboutira parce qu'il lève une DivideByZeroException, qui dérive d'une ArithmeticException, et le message d'exception spécifié correspond au message de l'exception levée par le test unitaire.

using CSExample;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestProject1
{
    public sealed class ExpectedArithmeticException : ExpectedExceptionBaseAttribute
    {
        private string exceptionMessage;
        private string wrongExceptionMessage;

        public string WrongExceptionMessage
        {
            get
            {
                return wrongExceptionMessage;
            }
            set
            {
                wrongExceptionMessage = value;
            }
        }

        public ExpectedArithmeticException(string expectedExceptionMessage) : this(expectedExceptionMessage, "No exception was thrown.")
        {
        }

        public ExpectedArithmeticException(string expectedExceptionMessage, string noExceptionMessage)
            : base(noExceptionMessage)
        {
            exceptionMessage = expectedExceptionMessage;
            WrongExceptionMessage = "The exception that was thrown does not derive from System.ArithmeticException.";
        }

        protected override void Verify(System.Exception exception)
        {
            Assert.IsNotNull(exception);

            // Handle assertion exceptions from assertion failures in the test method, since we are not interested in verifying those
            base.RethrowIfAssertException(exception);

            Assert.IsInstanceOfType(exception, typeof(System.ArithmeticException), wrongExceptionMessage);
            Assert.AreEqual(exceptionMessage, exception.Message, "Could not verify the exception message.");
        }
    }


    [TestClass()]
    public class DivisionClassTest
    {

        /* This test will pass because it thows a System.DivideByZeroException which derives from System.ArithmeticException. */
        [TestMethod()]
        [ExpectedArithmeticException("Attempted to divide by zero.", "An exception was expected, but no exception was thrown.", WrongExceptionMessage = "The wrong type of exception was thrown.")]
        public void DivideTest()
        {
            DivisionClass target = new DivisionClass();
            int numerator = 5;
            int denominator = 0;
            int actual;
            actual = target.Divide(numerator, denominator);
        }

    }
}

Sécurité des threads

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Voir aussi

Référence

Microsoft.VisualStudio.TestTools.UnitTesting, espace de noms