Ejercicio: Creación de un conjunto de pruebas
En el último ejercicio, ha agregado código de producto para la aplicación de calculadora y un primer método de prueba. Ahora, continuará con la creación del proyecto de prueba con un conjunto de pruebas.
Incorporación de más pruebas
Agregue más pruebas para asegurarse de probar toda la funcionalidad del código de producto de la calculadora.
Agregue el siguiente método de prueba adicional a la clase de prueba:
[TestMethod] public void AddTest() { // Arrange var calculator = new Calculator(); // Act var actual = calculator.Add(1, 1); // Assert Assert.AreEqual(2, actual); }
En el código anterior se muestra una prueba sencilla para escribir dos números en el método
Add
y validar un resultado.Desafío: ¿Puede crear pruebas similares para los métodos
Subtract
,Multiply
yDivide
?Nota
Si quiere comprobar el código, vea la sección sobre ejemplos esperados más adelante en esta unidad.
Agregue otra prueba para el método
Divide
que genera un error. El métodoDivide
de la calculadora todavía no puede controlar la división entre cero. Cree un método de prueba que escriba cero como divisor. Ejecute la prueba nueva para confirmar que se produce un error.No importa lo que hay en la instrucción de aserción, porque una excepción no detectada produce un error en la prueba. Por ahora, imagine que el método
Divide
debe devolver NULL al dividir entre cero. ¿Qué aserción debe usar?Nota
Si quiere comprobar el código, vea la prueba de división por cero esperada más adelante en esta unidad.
Ahora que empieza a acumular un conjunto de pruebas, obtendrá más información sobre cómo administrar varias pruebas mediante el Explorador de pruebas de Visual Studio.
Filtrado por pruebas con errores
En un proyecto de mayor tamaño, es posible que tenga cientos de pruebas en ejecución en el Explorador de pruebas. Para identificar rápidamente en qué pruebas se han producido errores, puede usar la funcionalidad de filtro.
En la barra de herramientas del Explorador de pruebas, seleccione el botón para las pruebas con error (el que tiene una X de color rojo). Este botón también resume cuántas pruebas tienen errores en la vista actual. En el ejemplo siguiente, este botón tiene el número 2, para indicar que hay dos pruebas con errores en la vista actual.
La vista de prueba se filtra para mostrar solo las pruebas con errores. En el ejemplo siguiente, solo aparecen dos pruebas en la lista de pruebas porque las otras cuatro (las que se superan) se han filtrado.
Seleccione el botón del matraz para volver a la visualización de las pruebas con todos los resultados. Este botón también muestra el número total de pruebas y cuántas son visibles en la vista actual como una fracción. Con el filtrado actual, solo se ven dos pruebas de un total de seis.
Uso de las opciones Agrupar por
El uso de la agrupación facilita el trabajo con un gran número de pruebas. Ahora se explorarán algunos de los valores para la agrupación.
Seleccione Agrupar por.
Para probar una nueva agrupación, borre los valores preestablecidos y agrupe solo por estado (por ejemplo, superado, con error o sin ejecutar) y, después, la clase.
Haga clic fuera del menú. La nueva selección Agrupar por se aplica a la vista de prueba.
En el ejemplo siguiente, el primer grupo consta de pruebas con errores organizadas por clase. El segundo grupo consta de pruebas superadas también organizadas por clase.
Depuración de una prueba
A veces, no es evidente por qué se produce un error en una prueba. Es posible que tenga que realizar una inspección más minuciosa y establecer un punto de interrupción y depurar la prueba mientras se ejecuta.
Haga clic en el margen del editor de código para establecer un punto de interrupción en
DivideByZeroTest
en la líneaAssert
.Haga clic con el botón derecho en el método de prueba en el editor de código y seleccione Depurar pruebas.
El depurador no alcanza el punto de interrupción porque se produce un error en
System.DivideByZeroException
, según lo previsto. En la captura de pantalla siguiente se muestra una excepción del sistema de división por cero en medio de la depuración. La excepción aparece en una llamada encima del métodoDivide
en la instrucción "return".
Aplicación del patrón "rojo, verde, refactorización"
El proceso "rojo, verde, refactorización" consiste en empezar con una prueba con errores, para ver que se puede producir un error en la prueba, pero también que es posible que el código del producto no se haya escrito todavía. En los próximos pasos se adaptará esta mentalidad.
DivideByZeroTest
producirá un error hasta que actualice el método Divide
de Calculator.cs para controlar correctamente que el divisor sea cero. Por tanto, esta prueba está en "rojo", porque espera a que escriba el código de producto que falta.
Escriba código para detectar la excepción si el divisor es cero y notifique al usuario un mensaje de consola como "No se puede dividir por cero". Después de detectar la excepción, el método
Divide
puede devolvernull
. Edite la firma del métodoDivide
para permitir un tipo de valor devueltoint
que admite un valor NULL.Ahora el método
Divide
debe ser similar al código siguiente.public int? Divide(int x, int y) { try { return x / y; } catch (DivideByZeroException) { Console.WriteLine("Cannot divide by zero."); return null; } }
Vuelva a ejecutar la prueba
DivideByZero
para confirmar que ahora se supera. Ahora el métodoDivide
devuelvenull
cuando el divisor es cero. Tenga en cuenta que la salida que advierte al usuario que no puede dividir por cero aparece en el resumen de detalles de la prueba en el Explorador de pruebas. Los detalles de la prueba incluyen la salidaConsole.Writeline
.La prueba ha pasado de rojo a verde porque ha agregado código de producto para hacer que se supere.
Ahora que tiene código de producto operativo y una prueba, refactorice el código de producto para crear una solución mejor y más sólida, si es posible.
Sugerencia
Tenga en cuenta los escenarios que es posible que se deban actualizar debido a los cambios recientes. No dude en agregar comentarios para describir la nueva funcionalidad.
Felicidades. Ha agregado más pruebas y ha aprendido a usar un patrón "rojo, verde, refactorización". Ha empezado con el error DivideByZeroTest
y ha modificado el código del producto hasta que ha pasado a color verde. El último paso antes de continuar ha sido el de refactorización.
Ejemplos esperados para pruebas de resta, multiplicación y división
[TestMethod]
public void SubtractTest()
{
// Arrange
var calculator = new Calculator();
// Act
var actual = calculator.Subtract(1, 1);
// Assert
Assert.AreEqual(0, actual);
}
[TestMethod]
public void MultiplyTest()
{
// Arrange
var calculator = new Calculator();
// Act
var actual = calculator.Multiply(1, 1);
// Assert
Assert.AreEqual(1, actual);
}
[TestMethod]
public void DivideTest()
{
// Arrange
var calculator = new Calculator();
// Act
var actual = calculator.Divide(1, 1);
// Assert
Assert.AreEqual(1, actual);
}
Prueba de división por cero esperada
[TestMethod]
public void DivideByZeroTest()
{
// Arrange
var calculator = new Calculator();
// Act
var actual = calculator.Divide(1, 0);
// Assert
Assert.IsNull(actual);
}