Udostępnij za pośrednictwem


Klasa ExpectedExceptionBaseAttribute

Jest klasą bazową dla atrybutów określających się spodziewać wyjątek od testów jednostkowych.

Hierarchia dziedziczenia

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

Przestrzeń nazw:  Microsoft.VisualStudio.TestTools.UnitTesting
Zestaw:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (w Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Składnia

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

Typ ExpectedExceptionBaseAttribute uwidacznia następujące elementy członkowskie.

Konstruktorzy

  Nazwa Opis
Metoda chroniona ExpectedExceptionBaseAttribute() Inicjuje nowe wystąpienie klasy ExpectedExceptionBaseAttribute.
Metoda chroniona ExpectedExceptionBaseAttribute(String) Inicjuje nowe wystąpienie klasy ExpectedExceptionBaseAttribute.

Początek

Właściwości

  Nazwa Opis
Właściwość chroniona NoExceptionMessage Infrastruktura.
Właściwość chroniona TestContext Infrastruktura.
Właściwość publiczna TypeId Po wdrożeniu w klasie pochodnej, pobiera identyfikator unikatowy dla tego Attribute. (Odziedziczone z Attribute).

Początek

Metody

  Nazwa Opis
Metoda publiczna Equals Infrastruktura. Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi. (Odziedziczone z Attribute).
Metoda chroniona Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Odziedziczone z Object).
Metoda publiczna GetHashCode Zwraca kod skrótu dla tego wystąpienia. (Odziedziczone z Attribute).
Metoda publiczna GetType Gets the Type of the current instance. (Odziedziczone z Object).
Metoda publiczna IsDefaultAttribute Po zastąpieniu w klasie pochodnej, wskazuje, czy wartość to wystąpienie jest wartością domyślną dla klasy pochodnej. (Odziedziczone z Attribute).
Metoda publiczna Match Po zastąpieniu w klasie pochodnej, zwraca wartość wskazującą, czy to wystąpienie jest równa określonego obiektu. (Odziedziczone z Attribute).
Metoda chroniona MemberwiseClone Creates a shallow copy of the current Object. (Odziedziczone z Object).
Metoda chroniona RethrowIfAssertException Zgłasza wyjątek ponownie, jeśli jest on AssertFailedException lub AssertInconclusiveException.
Metoda publiczna ToString Returns a string that represents the current object. (Odziedziczone z Object).
Metoda chroniona Verify Infrastruktura.

Początek

Jawne implementacje interfejsu

  Nazwa Opis
Jawna implementacja interfejsuMetoda prywatna System#Runtime#InteropServices#_Attribute#GetIDsOfNames Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania. (Odziedziczone z Attribute).
Jawna implementacja interfejsuMetoda prywatna System#Runtime#InteropServices#_Attribute#GetTypeInfo Pobiera informacje o typie dla obiektu, który można uzyskać informacji o typie dla interfejsu. (Odziedziczone z Attribute).
Jawna implementacja interfejsuMetoda prywatna System#Runtime#InteropServices#_Attribute#GetTypeInfoCount Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1). (Odziedziczone z Attribute).
Jawna implementacja interfejsuMetoda prywatna System#Runtime#InteropServices#_Attribute#Invoke Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt. (Odziedziczone z Attribute).

Początek

Uwagi

Implementując weryfikacji oczekiwany wyjątek. można określić dodatkowe informacje i wymagań, które wbudowanych metod klasy ExpectedExceptionAttribute nie może obsłużyć, takie jak następujące:

  • Sprawdzanie stanu wyjątku.

  • Oczekiwano więcej niż jeden typ wyjątku.

  • Wyświetlanie komunikat niestandardowy, kiedy generowany jest niewłaściwy typ wyjątku.

  • Kontrolowanie wynik testu z wynikiem ujemnym.

  • Aby uzyskać więcej informacji o sposobach używania atrybutów, zobacz Rozszerzanie metadanych za pomocą atrybutów.

Przykłady

Poniższa klasa zawiera metoda badania.

using System;

namespace CSExample
{
    public class DivisionClass
    {
        private int fraction;

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

Poniższa klasa atrybutu niestandardowego, ExpectedArithmeticException, pochodzi od klasy ExpectedExceptionBaseAttribute, aby sprawdzić typ wyjątku i komunikatu.Atrybut ExpectedArithmeticException weryfikuje, że metoda badania zgłasza wyjątek typu, który jest lub wywodzi się z System.ArithmeticException.To również sprawdza, czy komunikat o wyjątku odpowiada komunikat określony wyjątek.Przejdzie testu jednostki, bo to wyrzuca DivideByZeroException, co wynika ze ArithmeticException, i wiadomość wyjątku określonego pasuje do wiadomości wyjątek, który jest generowany przez testów jednostkowych.

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

    }
}

Bezpieczeństwo wątku

Wszystkie publiczne static (Shared w języku Visual Basic) elementy członkowskie tego typu są bezpieczne dla wątków. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.

Zobacz też

Informacje

Przestrzeń nazw Microsoft.VisualStudio.TestTools.UnitTesting