Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use las clases Assert del espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting para comprobar la funcionalidad específica. Un método de prueba ejecuta el código de la aplicación, pero notifica la corrección solo cuando se incluyen instrucciones Assert .
Información general
MSTest proporciona tres clases de aserción:
| Class | Propósito |
|---|---|
Assert |
Aserciones de uso general para valores, tipos y excepciones. |
StringAssert |
Aserciones específicas de cadenas para patrones, subcadenas y comparaciones. |
CollectionAssert |
Aserciones de colección para comparar y validar colecciones. |
Sugerencia
Cuando la funcionalidad existe en ambos Assert y StringAssert/CollectionAssert, prefiera la clase Assert. La Assert clase proporciona una mejor detectabilidad y es la opción recomendada para el nuevo código.
StringAssert y CollectionAssert se mantienen por motivos de compatibilidad con versiones anteriores.
Todos los métodos de aserción aceptan un parámetro de mensaje opcional que se muestra cuando se produce un error en la aserción, lo que le ayuda a identificar la causa:
Assert.AreEqual(expected, actual, "Values should match after processing");
La clase Assert.
Use la clase Assert para comprobar que el código sometido a prueba se comporta según lo previsto.
Métodos de aserción comunes
[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());
}
API disponibles
- 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
La clase StringAssert.
Use la clase StringAssert para comparar y examinar cadenas.
Nota:
Todos los StringAssert métodos tienen equivalentes en la Assert clase . Se prefieren los métodos Assert para mejorar la facilidad de descubrimiento. La StringAssert clase se mantiene por compatibilidad con versiones anteriores.
Las API disponibles son:
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
La clase CollectionAssert.
Utilice la clase CollectionAssert para comparar colecciones de objetos o comprobar el estado de una colección.
Nota:
Cuando existe un método equivalente en la Assert clase (como Assert.Contains, Assert.DoesNotContain), prefiere usar Assert para mejorar la detectabilidad. La CollectionAssert clase se mantiene principalmente por motivos de compatibilidad con versiones anteriores.
Las API disponibles son:
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
procedimientos recomendados
Usar aserciones específicas: se prefiere
AreEqualporIsTrue(a == b)mejores mensajes de error.Incluir mensajes descriptivos: ayude a identificar los errores rápidamente con mensajes de aserción claros.
Probar una cosa a la vez: cada método de prueba debe comprobar un solo comportamiento.
Uso
Throws/ThrowsExactlypara excepciones: en MSTest v3.8+, prefiereAssert.Throws,Assert.ThrowsExactlyy sus homólogos asincrónicos (ThrowsAsync,ThrowsExactlyAsync) sobre elExpectedExceptionatributo .Prefer
AssertoverStringAssert/CollectionAssert: Cuando exista la funcionalidad en ambas clases, use la claseAssertpara mejorar la capacidad de descubrimiento y la coherencia.
Analizadores relacionados
Los analizadores siguientes ayudan a garantizar el uso adecuado de las aserciones:
-
MSTEST0006 : evite
ExpectedExceptionel atributo , useAssert.Throwsmétodos en su lugar. - MSTEST0017 : los argumentos de aserción deben pasarse en el orden correcto.
- MSTEST0023: No niegue las afirmaciones booleanas.
-
MSTEST0025 - Se prefiere
Assert.Failen lugar de condiciones siempre falsas. - MSTEST0026 : los argumentos de aserción deben evitar el acceso condicional.
- MSTEST0032 - Revisar las condiciones de aserción que siempre son verdaderas.
- MSTEST0037 : use los métodos de aserción adecuados.
-
MSTEST0038 - Evite el uso de
Assert.AreSamecon tipos de valor. -
MSTEST0039 : use métodos más recientes
Assert.Throws. - MSTEST0040: evite el uso de aserciones en contexto de void asincrónico.
-
MSTEST0046: use
Asserten lugar deStringAssert. -
-
Assert.ThrowsMSTEST0051 debe contener una sola instrucción. -
MSTEST0053 : evite
Assertlos parámetros de formato. - MSTEST0058 - Evite aserciones en bloques catch.