Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreNotSame
- Assert.AreSame
- Assert.Contains
- Assert.ContainsSingle
- Assert.DoesNotContain
- Assert.DoesNotEndWith
- Assert.DoesNotMatchRegex
- Assert.DoesNotStartWith
- Assert.Fail
- Assert.HasCount
- Assert.Inconclusive
- Assert.IsEmpty
- Assert.IsFalse
- Assert.IsGreaterThan
- Assert.IsGreaterThanOrEqualTo
- Assert.IsInRange
- Assert.IsInstanceOfType
- Assert.IsLessThan
- Assert.IsLessThanOrEqualTo
- Assert.IsNegative
- Assert.IsNotEmpty
- Assert.IsNotInstanceOfType
- Assert.IsNotNull
- Assert.IsNull
- Assert.IsPositive
- Assert.IsTrue
- Assert.MatchesRegex
- Assert.StartsWith
- Assert.Throws
- Assert.ThrowsAsync
- Assert.ThrowsExactly
- Assert.ThrowsExactlyAsync
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:
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
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:
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
Práticas recomendadas
Use asserções específicas: prefira
AreEqualaIsTrue(a == b)para obter melhores mensagens de falha.Incluir mensagens descritivas: ajude a identificar falhas rapidamente com mensagens de declaração claras.
Teste uma coisa de cada vez: cada método de teste deve verificar um único comportamento.
Usar
Throws/ThrowsExactlypara exceções: no MSTest v3.8+, prefiraAssert.Throws,Assert.ThrowsExactlye seus equivalentes assíncronos (ThrowsAsync,ThrowsExactlyAsync) em vez doExpectedExceptionatributo.Prefira
AssertaStringAssert/CollectionAssert: quando a funcionalidade existir em ambas as classes, use a classeAssertpara obter melhor capacidade de descoberta e consistência.
Analisadores relacionados
Os analisadores a seguir ajudam a garantir o uso adequado de declarações:
-
MSTEST0006 – Evite
ExpectedExceptionatributos, useAssert.Throwsmétodos. - MSTEST0017 - Os argumentos de declaração devem ser passados na ordem correta.
- MSTEST0023 - Não negue as declarações boolianas.
-
MSTEST0025 – Prefira
Assert.Failem 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.AreSamecom tipos de valor. -
MSTEST0039 – Usar métodos mais recentes
Assert.Throws. - MSTEST0040 – evite usar declarações no contexto assíncrono nulo.
-
MSTEST0046 - Usar
Assertem vez deStringAssert. -
MSTEST0051 -
Assert.Throwsdeve conter uma única instrução. -
MSTEST0053 – Evite
Assertparâmetros de formato. - MSTEST0058 – evite declarações em blocos de captura.