Utilizar las clases Assert
Actualización: noviembre 2007
Utilice las clases Assert del espacio de nombres UnitTestingFramework para comprobar una funcionalidad específica. Un método de prueba unitaria utiliza el código de un método del código de desarrollo, pero crea informes sobre aspectos del comportamiento del código únicamente si se incluyen instrucciones Assert.
Nota: |
---|
Con o sin instrucciones Assert, las pruebas unitarias pueden generar datos de cobertura de código. Para obtener más información, vea Cómo: Obtener datos de cobertura de código. |
Tipos de clases Assert
El espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting proporciona varios tipos de clases Assert:
En su método de prueba, puede llamar a la cantidad de métodos de la clase Assert que desee, como Assert.AreEqual(). La clase Assert tiene numerosos métodos entre los que elegir y muchos de esos métodos tienen varias sobrecargas.
Utilice la clase CollectionAssert para comparar colecciones de objetos y para comprobar el estado de una o más colecciones.
Utilice la clase StringAssert para comparar cadenas. Esta clase contiene una variedad de métodos útiles como StringAssert.Contains, StringAssert.Matches y StringAssert.StartsWith.
La excepción AssertFailedException se inicia siempre que una prueba produce errores. Una prueba produce errores si agota el tiempo de espera, si inicia una excepción inesperada, o si contiene una instrucción Assert que genera un resultado de error.
AssertInconclusiveException se inicia siempre que una prueba genera un resultado de No concluyente. Normalmente, se agrega una instrucción Assert.Inconclusive a una prueba con la que todavía se está trabajando, para indicar que no está lista para ejecutarse.
Nota: |
---|
Una estrategia alternativa sería marcar una prueba que no está lista para ejecutarse con el atributo Ignore. Sin embargo, esto tiene la desventaja de que no es fácil generar un informe sobre el número de pruebas que no se han implementado todavía. |
Si escribe una nueva clase de excepciones Assert, si se hace que esa clase herede de la clase base UnitTestAssertException, será más fácil identificar la excepción como error de aserción en lugar de excepción inesperada iniciada desde la prueba o el código de producción.
Represente un método de prueba con el atributo ExpectedExceptionAttribute cuando desee que el método de prueba verifique que una excepción que espera que sea iniciada por un método de su código de desarrollo realmente se inicie en ese método.
Sobrecargar tipos no seguros con Assert.AreEqual
El método Assert.AreEqual tiene muchas sobrecargas que permiten comparar tipos de datos específicos. Sin embargo, el método Assert.AreEqual no tiene una sobrecarga para tipos no seguros, como el tipo de datos de puntero.
Para ilustrarlo, cree una aplicación de consola de C# que contenga la clase siguiente:
unsafe public class CUnsafeTest
{
private int* m_pX = null;
unsafe public void VoidPtr(void* voidPtr)
{
}
unsafe public int* ReturnPointer(float* fPtr, TestThis* pTestThis)
{
int x = 5;
return &x;
}
}
Ahora, genere pruebas para la clase CunsafeTest. Para obtener más información, vea Cómo: Generar una prueba unitaria. Verá código generado similar al ejemplo siguiente:
[TestMethod()]
public void ReturnPointerTest()
{
unsafe
{
CodeGen.BVT.Unsafe.CUnsafeTest target;
target = new CodeGen.BVT.Unsafe.CUnsafeTest();
// TODO: Initialize to an appropriate value
System.Single* fPtr = null;
// TODO: Initialize to an appropriate value
TestThis* pTestThis = null;
// TODO: Initialize to an appropriate value
System.Int32* expected = null;
System.Int32* actual;
actual = target.ReturnPointer(fPtr, pTestThis);
Assert.AreEqual(actual, expected);
// On the preceding line, no overload is available.
}
}
En este caso, debería reemplazar la instrucción Assert.AreEqual con su propio código de comprobación personalizado.