Compartir a través de


ExpectedExceptionBaseAttribute (Clase)

Esta es una clase base para los atributos que especifican que esperan una excepción de una prueba unitaria.

Jerarquía de herencia

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

Espacio de nombres:  Microsoft.VisualStudio.TestTools.UnitTesting
Ensamblado:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (en Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Sintaxis

'Declaración
<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

El tipo ExpectedExceptionBaseAttribute expone los siguientes miembros.

Constructores

  Nombre Descripción
Método protegido ExpectedExceptionBaseAttribute() Inicializa una nueva instancia de la clase ExpectedExceptionBaseAttribute.
Método protegido ExpectedExceptionBaseAttribute(String) Inicializa una nueva instancia de la clase ExpectedExceptionBaseAttribute.

Arriba

Propiedades

  Nombre Descripción
Propiedad protegida NoExceptionMessage Infraestructura.
Propiedad protegida TestContext Infraestructura.
Propiedad pública TypeId Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Se hereda de Attribute).

Arriba

Métodos

  Nombre Descripción
Método público Equals Infraestructura. Devuelve un valor que indica si esta instancia equivale a un objeto especificado. (Se hereda de Attribute).
Método protegido Finalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método público GetHashCode Devuelve el código hash de esta instancia. (Se hereda de Attribute).
Método público GetType Obtiene el objeto Type de la instancia actual. (Se hereda de Object).
Método público IsDefaultAttribute Cuando se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado para la clase derivada. (Se hereda de Attribute).
Método público Match Cuando se reemplaza en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado. (Se hereda de Attribute).
Método protegido MemberwiseClone Crea una copia superficial del objeto Object actual. (Se hereda de Object).
Método protegido RethrowIfAssertException Produce la excepción de nuevo si se trata de AssertFailedException o AssertInconclusiveException.
Método público ToString Devuelve una cadena que representa el objeto actual. (Se hereda de Object).
Método protegido Verify Infraestructura.

Arriba

Implementaciones explícitas de interfaces

  Nombre Descripción
Implementación explícita de interfacesMétodo privado _Attribute.GetIDsOfNames Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado _Attribute.GetTypeInfo Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado _Attribute.GetTypeInfoCount Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1). (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado _Attribute.Invoke Proporciona acceso a las propiedades y los métodos expuestos por un objeto. (Se hereda de Attribute).

Arriba

Comentarios

Implementar su propia comprobación de excepción esperada. puede especificar información adicional y requisitos que los métodos integrados de la clase ExpectedExceptionAttribute no pueden controlar, como los siguientes:

  • Comprobar el estado de la excepción.

  • Se espera más de un tipo de excepción.

  • Mostrar un mensaje personalizado cuando se produce un tipo equivocado de excepción.

  • Controlar el resultado de una prueba negativa.

  • Para obtener más información acerca de cómo utilizar los atributos, vea Extender metadatos mediante atributos.

Ejemplos

La clase siguiente contiene el método que se va a probar.

using System;

namespace CSExample
{
    public class DivisionClass
    {
        private int fraction;

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

La siguiente clase de atributos personalizada, ExpectedArithmeticException, deriva de la clase ExpectedExceptionBaseAttribute para comprobar un tipo de excepción y mensaje. El atributo ExpectedArithmeticException comprueba que un método de prueba produce una excepción de tipo System.ArithmeticException o derivado de este. También comprueba que el mensaje de excepción coincide con el especificado. La prueba unitaria pasará porque produce DivideByZeroException, que se deriva de ArithmeticException, y el mensaje de excepción especificado coincide con el mensaje de excepción producido por la prueba unitaria.

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

    }
}

Seguridad para subprocesos

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Vea también

Referencia

Microsoft.VisualStudio.TestTools.UnitTesting (Espacio de nombres)