Compartilhar via


Classe ExpectedExceptionBaseAttribute

Esta é uma classe base para atributos que especificam a esperar uma exceção de um teste de unidade.

Hierarquia de herança

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

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

Sintaxe

'Declaração
<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

O tipo ExpectedExceptionBaseAttribute expõe os membros a seguir.

Construtores

  Nome Descrição
Método protegido ExpectedExceptionBaseAttribute() Inicializa uma nova instância da classe ExpectedExceptionBaseAttribute.
Método protegido ExpectedExceptionBaseAttribute(String) Inicializa uma nova instância da classe ExpectedExceptionBaseAttribute.

Início

Propriedades

  Nome Descrição
Propriedade protegida NoExceptionMessage Infraestrutura.
Propriedade protegida TestContext Infraestrutura.
Propriedade pública TypeId Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute. (Herdado de Attribute.)

Início

Métodos

  Nome Descrição
Método público Equals Infraestrutura. Returns a value that indicates whether this instance is equal to a specified object. (Herdado de Attribute.)
Método protegido Finalize Permite que um objeto tentar liberar recursos e executar outras operações de limpeza antes que ele é recuperado pela coleta de lixo. (Herdado de Object.)
Método público GetHashCode Retorna o código hash para essa instância. (Herdado de Attribute.)
Método público GetType Obtém o Type da instância atual. (Herdado de Object.)
Método público IsDefaultAttribute Quando substituído em uma classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute.)
Método público Match Quando substituído em uma classe derivada, retorna um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute.)
Método protegido MemberwiseClone Cria uma cópia superficial do atual Object. (Herdado de Object.)
Método protegido RethrowIfAssertException Lança a exceção novamente se ele for um AssertFailedException ou um AssertInconclusiveException.
Método público ToString Retorna um string que representa o objeto atual. (Herdado de Object.)
Método protegido Verify Infraestrutura.

Início

Implementações explícitas da interface

  Nome Descrição
Implementação explícita da interfaceMétodo particular _Attribute.GetIDsOfNames Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho. (Herdado de Attribute.)
Implementação explícita da interfaceMétodo particular _Attribute.GetTypeInfo Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface. (Herdado de Attribute.)
Implementação explícita da interfaceMétodo particular _Attribute.GetTypeInfoCount Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1). (Herdado de Attribute.)
Implementação explícita da interfaceMétodo particular _Attribute.Invoke Fornece acesso a propriedades e métodos expostos por um objeto. (Herdado de Attribute.)

Início

Comentários

Implementando a sua própria verificação de exceção esperada. Você pode especificar informações adicionais e requisitos que não podem manipular os métodos internos da classe ExpectedExceptionAttribute, como o seguinte:

  • Verificando o estado de exceção.

  • Esperando mais de um tipo de exceção.

  • Exibindo uma mensagem personalizada quando um tipo incorreto de exceção é lançado.

  • Controlando o resultado de um teste negativo.

  • Para obter mais informações sobre como usar os atributos, consulte Estendendo metadados usando atributos.

Exemplos

A seguinte classe contém o método de teste.

using System;

namespace CSExample
{
    public class DivisionClass
    {
        private int fraction;

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

A seguinte classe de atributo personalizado, ExpectedArithmeticException, deriva da classe ExpectedExceptionBaseAttribute para verificar o tipo de exceção e a mensagem. O atributo ExpectedArithmeticException verifica se um método de teste lança uma exceção de um tipo que deriva de System.ArithmeticException ou. Ele também verifica que a mensagem de exceção coincide com a mensagem de exceção especificada. O teste de unidade passará porque ele lança um DivideByZeroException, que é derivada de ArithmeticException, e a mensagem de exceção especificada corresponde a mensagem da exceção é acionada pelo Test. unidade

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

    }
}

Acesso thread-safe

Quaisquer membros static (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Consulte também

Referência

Namespace Microsoft.VisualStudio.TestTools.UnitTesting