Compartilhar via


Estrutura de testes de unidade

Um teste de unidade é um método que é um membro de uma classe escrita em translation from VPE for Csharp, Visual Basic ou Visual C++.

Observação:

Para obter detalhes sobre como usar unidade de testes com C++ código de produção e como usar testes unidade escrito em C++, consulte Testes de unidade e C++.

Para o teste de unidade ser reconhecido pelo Ferramentas de teste do Team System, esse arquivo de código-fonte deve residir em um projeto de teste, que in turn é parte de um Visual Studio solução. Quando você cria este projeto, ou a solução inteira, o projeto teste é criado em um conjunto que contém o teste de unidade executável.

Todos os métodos de teste de unidade são marcados com o [TestMethod()] atributo, <TestMethod()> no Visual Basic, e são membros das [TestClass()] classe. Por sua vez, essa classe é definida no namespace Microsoft.VisualStudio.TestTools.UnitTesting. Quando você gera um teste de unidade, você verá que isso namespace está incluído no início do arquivo gerado em um using ou Imports demonstrativo.

Atributos e propriedades de teste de unidade

Juntamente com o [TestMethod()] atributo do método de teste de unidade e o [TestClass()] atributo de sua classe, outros atributos são usados para ativar funcionalidade específica de teste de unidade. Principais entre esses atributos são [TestInitialize()] e [TestCleanup()]. Use um método marcado com [TestInitialize()] para preparar aspectos do ambiente no qual o teste de unidade será executado; o objetivo de fazer isso é estabelecer um estado conhecido para executar o teste de unidade. Por exemplo, você pode usar um [TestInitialize()] método para copiar, alterar ou criar determinados arquivos de dados que o teste usará.

Use um método marcado com [TestCleanup()] para retornar o ambiente para um estado conhecido depois de um teste foi executado; isso pode significar exclusão de arquivos em pastas ou retornar um banco de dados para um estado conhecido. Um exemplo disso é redefir um banco de dados de inventário para um estado inicial após o teste de um método usado em um aplicativo de entrada ordenada.Além disso, é recomendável que você use código limpo em um [TestCleanup()]ou método ClassCleanup e não em um método finalizador. Exceções que são jogadas de um método finalizador não irão ser interceptadas, e podem causar resultados inesperados.

Uma propriedade importante em classes de teste é a propriedade TestContext.Esta propriedade contém informações incluindo o nome do teste de unidade que está sendo executado, o diretório de implantação, os nomes de arquivos de log, e, para testar orientado a dados, o banco de dados ao qual você está conectado.A propriedade TestContext retorna uma instância TestContext.Para obter mais informações, consulte Usando a classe TestContext.

Exemplo do teste de unidade

O trecho de código a seguir mostra um teste unidade simples escrito em C#.

[TestMethod()]
public void DebitTest()
{
    string customerName = "Mr. Bryan Walton"; 
    double balance = 11.99; 
    BankAccount target = new BankAccount(customerName, balance);
    double amount = 11.22; 
    target.Debit(amount);
    Assert.AreEqual((System.Convert.ToDouble(0.77)), target.Balance, 0.05); // 0.05 is tolerance for floating-point comparison
    //Assert.Inconclusive("A method that does not return a value cannot be verified.");
}

For another example, see Codificando um teste de unidade orientado a dados.

Resulatados de Unidade de teste

Existem três maneiras para verificar a unidade de teste passou:

  • Usar uma ou mais instruções Assert para validar resultados específicos.Para obter mais informações, consulte Using Assert Statements.

  • Verifique se nenhuma exceção foi jogada.É ainda recomendável usar uma ou mais instruções Assert.

  • Verifique se uma exceção específica é jogada.Você pode fazer isso usando o ExpectedExceptionAttribute atributo.

Usando instruções Assert

Se o resultado PASS ou FAIL produzido por um teste for mais informativo ou importantes para você que as ações que o teste pode concluir, você deve usar uma ou mais instruções Assert no código do teste.

O mecanismo teste assume que cada teste unidade começa em um estado passagem.O teste permanece nesse estado até que uma demonstrativo Assert produza um resultado que contradiz o estado passagem, altere-os de PASS para FAIL ou INCONCLUSIVE, ou até que uma exceção não especificada em um ExpectedExceptionAttribute atributo é lançado. Em outras palavras, um teste de unidade sem uma instrução Assert produzirá um resultado PASS sempre que ele é executado.Isso não é necessariamente um teste inútil; você pode apenas desejar exercitar o código para certificar-se de que ele executa sem jogar uma exceção.O exercício do código em um teste de unidade será informado conforme abordado nas estatísticas de cobertura do código, independentemente se teste produziu um resultado decisivo ou mesmo continha uma instrução Assert.

No entanto, para verificar se uma ação específica está sendo executada ou for sendo atingido um estado específico, você deve usar Asserts.Várias instruções Assert estão disponível para você no Microsoft.VisualStudio.TestTools.UnitTesting espaço para nome. As várias instruções Assert oferecem flexibilidade; por exemplo, você pode forçar um teste para falhar utilizando a demonstrativo Assert.Fail(). Com essas instruções Assert, você pode, obviamente, construir sua própria funcionalidade personalizada, talvez usando instruções Assert no if blocos.

Independentemente de quais resultados um teste retorna, ele passa ou falha de acordo com suas instruções Assert.Se um teste contiver vários Asserts, o estado do teste permanece PASS até que seja encontrado um Assert que altere o estado para FAIL ou INCONCLUSIVE.

Para obter mais informações, consulte Usando a Classes Assert.

Consulte também

Referência

Microsoft.VisualStudio.TestTools.UnitTesting

Outros recursos

Criando Testes de Unidade