Compartir por


Aserciones de MSTest

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

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:

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:

procedimientos recomendados

  1. Usar aserciones específicas: se prefiere AreEqual por IsTrue(a == b) mejores mensajes de error.

  2. Incluir mensajes descriptivos: ayude a identificar los errores rápidamente con mensajes de aserción claros.

  3. Probar una cosa a la vez: cada método de prueba debe comprobar un solo comportamiento.

  4. Uso Throws/ThrowsExactly para excepciones: en MSTest v3.8+, prefiere Assert.Throws, Assert.ThrowsExactlyy sus homólogos asincrónicos (ThrowsAsync, ThrowsExactlyAsync) sobre el ExpectedException atributo .

  5. Prefer Assert over StringAssert/CollectionAssert: Cuando exista la funcionalidad en ambas clases, use la clase Assert para mejorar la capacidad de descubrimiento y la coherencia.

Los analizadores siguientes ayudan a garantizar el uso adecuado de las aserciones:

  • MSTEST0006 : evite ExpectedException el atributo , use Assert.Throws mé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.Fail en 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.AreSame con 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 Assert en lugar de StringAssert.
  • - Assert.Throws MSTEST0051 debe contener una sola instrucción.
  • MSTEST0053 : evite Assert los parámetros de formato.
  • MSTEST0058 - Evite aserciones en bloques catch.

Consulte también