Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Use as classes do namespace para verificar a AssertMicrosoft.VisualStudio.TestTools.UnitTesting funcionalidade específica. Um método de teste exercita o código na sua aplicação, mas só reporta a correção quando inclui declarações Assert.
Visão geral
O MSTest fornece três classes de asserção:
| Class | Propósito |
|---|---|
Assert |
Afirmações de propósito geral para valores, tipos e exceções. |
StringAssert |
Asserções específicas de cadeias de caracteres para padrões, substrings e comparações. |
CollectionAssert |
Afirmações de coleção para comparar e validar coleções. |
Sugestão
Quando existe funcionalidade em ambos Assert e StringAssert/CollectionAssert, prefira a classe Assert. A Assert classe oferece melhor descoberta e é a escolha recomendada para código novo.
StringAssert e CollectionAssert são mantidos para compatibilidade retroativa.
Todos os métodos de asserção aceitam um parâmetro de mensagem opcional que aparece quando a asserção falha, ajudando a identificar a causa:
Assert.AreEqual(expected, actual, "Values should match after processing");
A Assert classe
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 StringAssert classe
Use a StringAssert classe para comparar e examinar cadeias de caracteres.
Observação
Todos os StringAssert métodos têm equivalentes na Assert disciplina. Prefira os métodos Assert para uma melhor capacidade de descoberta. A StringAssert classe é mantida para compatibilidade retroativa.
As APIs disponíveis são:
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
A CollectionAssert classe
Use a CollectionAssert classe para comparar coleções de objetos ou para verificar o estado de uma coleção.
Observação
Quando existe um método equivalente na Assert classe (como Assert.Contains, Assert.DoesNotContain), prefere usar Assert para melhor descoberta. A CollectionAssert classe é mantida principalmente para compatibilidade retroativa.
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
Melhores práticas
Use afirmações específicas: Prefira
AreEqualem vez deIsTrue(a == b)para obter melhores mensagens de falha.Inclua mensagens descritivas: Ajude a identificar falhas rapidamente com mensagens claras de afirmação.
Teste uma coisa de cada vez: Cada método de teste deve verificar um único comportamento.
Utilização
Throws/ThrowsExactlypara exceções: No MSTest v3.8+, preferemAssert.Throws,Assert.ThrowsExactly, e os seus equivalentes assíncronos (ThrowsAsync,ThrowsExactlyAsync) em vez doExpectedExceptionatributo.Preferir
Assertem vez deStringAssert/CollectionAssert: Quando existe funcionalidade em ambas as classes, use a classeAssertpara melhor visibilidade e consistência.
Analisadores relacionados
Os seguintes analisadores ajudam a garantir a utilização correta das asserções:
-
MSTEST0006 - Evita
ExpectedExceptionatributos, usaAssert.Throwsmétodos em vez disso. - MSTEST0017 - Os argumentos de afirmação devem ser apresentados na ordem correta.
- MSTEST0023 - Não negues afirmações booleanas.
-
MSTEST0025 - Prefere
Assert.Faila condições sempre falsas. - MSTEST0026 - Os argumentos de asserção devem evitar o acesso condicional.
- MSTEST0032 - Revisar condições de asserção sempre verdadeiras.
- MSTEST0037 - Use métodos adequados de afirmação.
-
MSTEST0038 - Evite
Assert.AreSamecom os tipos de valor. -
MSTEST0039 - Use métodos mais
Assert.Throwsrecentes. - MSTEST0040 - Evite usar assertos em contexto void assíncrono.
-
MSTEST0046 - Use
Assertem vez deStringAssert. -
MSTEST0051 -
Assert.Throwsdeve conter uma única instrução. -
MSTEST0053 - Evite
Assertparâmetros de formato. - MSTEST0058 - Evite assertivas em blocos catch.
Consulte também
- Escrever testes no MSTest
- Testes orientados por dados
- Classe TestContext
- Analisadores MSTest