Compartilhar via


Asserções MSTest

Use as classes Assert do namespace Microsoft.VisualStudio.TestTools.UnitTesting para verificar uma funcionalidade específica. Um método de teste exerce o código no aplicativo, mas relata a corretude somente quando você inclui Assert instruções.

Visão geral

O MSTest fornece três classes de declaração:

Class Propósito
Assert Declarações de uso geral para valores, tipos e exceções.
StringAssert Asserções específicas de cadeia de caracteres para padrões, subcadeias de caracteres e comparações.
CollectionAssert Declarações de coleção para comparar e validar coleções.

Dica

Quando a funcionalidade existir em ambos Assert e StringAssert/CollectionAssert, prefira a classe Assert. A Assert classe fornece melhor capacidade de descoberta e é a opção recomendada para o novo código. StringAssert e CollectionAssert são mantidos para compatibilidade com versões anteriores.

Todos os métodos de asserção aceitam um parâmetro de mensagem opcional que é exibido quando a declaração falha, ajudando você a identificar a causa:

Assert.AreEqual(expected, actual, "Values should match after processing");

A classe Assert

Use a classe Assert para verificar se o código em teste se comporta conforme o esperado.

Métodos comuns de asserção

[TestMethod]
public async Task AssertExamples()
{
    // Equality
    Assert.AreEqual(5, calculator.Add(2, 3));
    Assert.AreNotEqual(0, result);

    // Reference equality
    Assert.AreSame(expected, actual);
    Assert.AreNotSame(obj1, obj2);

    // Boolean conditions
    Assert.IsTrue(result > 0);
    Assert.IsFalse(string.IsNullOrEmpty(name));

    // Null checks
    Assert.IsNull(optionalValue);
    Assert.IsNotNull(requiredValue);

    // Type checks
    Assert.IsInstanceOfType<IDisposable>(obj);
    Assert.IsNotInstanceOfType<string>(obj);

    // Exception testing (MSTest v3.8+)
    Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
    await Assert.ThrowsExactlyAsync<InvalidOperationException>(
        async () => await service.ProcessAsync());
}

APIs disponíveis

A classe StringAssert

Use a classe StringAssert para comparar e examinar cadeias de caracteres.

Observação

Todos os StringAssert métodos têm equivalentes na Assert classe. Prefira os Assert métodos para obter melhor capacidade de descoberta. A StringAssert classe é mantida para compatibilidade com versões anteriores.

As APIs disponíveis são:

A classe CollectionAssert

Use a classe CollectionAssert para comparar coleções de objetos ou verificar o estado de uma ou mais coleções.

Observação

Quando existe um método equivalente na classe Assert (como Assert.Contains, Assert.DoesNotContain), prefira usar Assert para melhorar a capacidade de descoberta. A CollectionAssert classe é mantida principalmente para compatibilidade com versões anteriores.

As APIs disponíveis são:

Práticas recomendadas

  1. Use asserções específicas: prefira AreEqual a IsTrue(a == b) para obter melhores mensagens de falha.

  2. Incluir mensagens descritivas: ajude a identificar falhas rapidamente com mensagens de declaração claras.

  3. Teste uma coisa de cada vez: cada método de teste deve verificar um único comportamento.

  4. Usar Throws/ThrowsExactly para exceções: no MSTest v3.8+, prefira Assert.Throws, Assert.ThrowsExactlye seus equivalentes assíncronos (ThrowsAsync, ThrowsExactlyAsync) em vez do ExpectedException atributo.

  5. Prefira Assert a StringAssert/CollectionAssert: quando a funcionalidade existir em ambas as classes, use a classe Assert para obter melhor capacidade de descoberta e consistência.

Os analisadores a seguir ajudam a garantir o uso adequado de declarações:

  • MSTEST0006 – Evite ExpectedException atributos, use Assert.Throws métodos.
  • MSTEST0017 - Os argumentos de declaração devem ser passados na ordem correta.
  • MSTEST0023 - Não negue as declarações boolianas.
  • MSTEST0025 – Prefira Assert.Fail em vez de condições sempre falsas.
  • MSTEST0026 - Os argumentos de declaração devem evitar o acesso condicional.
  • MSTEST0032 – examine as condições de declaração sempre verdadeiras.
  • MSTEST0037 - Use métodos de declaração adequados.
  • MSTEST0038 – Evite Assert.AreSame com tipos de valor.
  • MSTEST0039 – Usar métodos mais recentes Assert.Throws .
  • MSTEST0040 – evite usar declarações no contexto assíncrono nulo.
  • MSTEST0046 - Usar Assert em vez de StringAssert.
  • MSTEST0051 - Assert.Throws deve conter uma única instrução.
  • MSTEST0053 – Evite Assert parâmetros de formato.
  • MSTEST0058 – evite declarações em blocos de captura.

Consulte também