Share via


ExpectedExceptionBaseAttribute-Klasse

Dies ist eine Basisklasse für Attribute, die angeben, dass für einen Komponententest eine Ausnahme zu erwarten ist.

Vererbungshierarchie

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

Namespace:  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (in Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Syntax

'Declaration
<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

Der ExpectedExceptionBaseAttribute-Typ macht die folgenden Member verfügbar.

Konstruktoren

  Name Beschreibung
Geschützte Methode ExpectedExceptionBaseAttribute() Initialisiert eine neue Instanz der ExpectedExceptionBaseAttribute-Klasse.
Geschützte Methode ExpectedExceptionBaseAttribute(String) Initialisiert eine neue Instanz der ExpectedExceptionBaseAttribute-Klasse.

Zum Seitenanfang

Eigenschaften

  Name Beschreibung
Geschützte Eigenschaft NoExceptionMessage Infrastruktur.
Geschützte Eigenschaft TestContext Infrastruktur.
Öffentliche Eigenschaft TypeId Bei Implementierung in einer abgeleiteten Klasse wird ein eindeutiger Bezeichner für dieses Attribute abgerufen. (Von Attribute geerbt.)

Zum Seitenanfang

Methoden

  Name Beschreibung
Öffentliche Methode Equals Infrastruktur. Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist. (Von Attribute geerbt.)
Geschützte Methode Finalize Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche Methode GetHashCode Gibt den Hashcode für diese Instanz zurück. (Von Attribute geerbt.)
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche Methode IsDefaultAttribute Beim Überschreiben in einer abgeleiteten Klasse wird angegeben, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist. (Von Attribute geerbt.)
Öffentliche Methode Match Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht. (Von Attribute geerbt.)
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie vom aktuellen Object. (Von Object geerbt.)
Geschützte Methode RethrowIfAssertException Löst die Ausnahme erneut aus, falls AssertFailedException oder AssertInconclusiveException.
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Geschützte Methode Verify Infrastruktur.

Zum Seitenanfang

Explizite Schnittstellenimplementierungen

  Name Beschreibung
Explizite SchnittstellenimplementierungPrivate Methode System#Runtime#InteropServices#_Attribute#GetIDsOfNames Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode System#Runtime#InteropServices#_Attribute#GetTypeInfo Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können. (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode System#Runtime#InteropServices#_Attribute#GetTypeInfoCount Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode System#Runtime#InteropServices#_Attribute#Invoke Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Von Attribute geerbt.)

Zum Seitenanfang

Hinweise

Durch das Implementieren eigener erwarteten Ausnahmeüberprüfung. Sie können zusätzlichen Informationen und Anforderungen, die die integrierten Methoden der ExpectedExceptionAttribute-Klasse nicht bearbeiten können, z Folgendes angeben:

  • Der Zustand der Ausnahme wird überprüft.

  • Mehr als ein Ausnahmetyp wird erwartet.

  • Anzeigen einer benutzerdefinierten Meldung, wenn ein falscher Typ von Ausnahme ausgelöst wird.

  • Kontrollieren des Ergebnisses eines negativen Tests.

  • Weitere Informationen zum Verwenden von Attributen finden Sie unter Erweitern von Metadaten mithilfe von Attributen.

Beispiele

Die folgende Klasse enthält die zu testende Methode:

using System;

namespace CSExample
{
    public class DivisionClass
    {
        private int fraction;

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

Die folgende benutzerdefinierte Attributklasse ExpectedArithmeticException wird von der ExpectedExceptionBaseAttribute-Klasse abgeleitet, um einen Ausnahmetyp und eine Meldung zu überprüfen. Das ExpectedArithmeticExceptions-Attribut überprüft, ob eine Testmethode eine Ausnahme eines Typs auslöst, der System.ArithmeticException oder davon abgeleitet ist. Außerdem wird überprüft, ob die Ausnahmemeldung mit der angegebenen Ausnahmemeldung übereinstimmt. Der Komponententest wird übergeben, da er DivideByZeroException auslöst, die von ArithmeticException abgeleitet wird, und da die angegebenen Ausnahmemeldung der Meldung der Ausnahme entspricht, die durch den Komponententest ausgelöst wird.

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);
        }

    }
}

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Siehe auch

Referenz

Microsoft.VisualStudio.TestTools.UnitTesting-Namespace