Cuando se desarrolla software estamos anuentes a que sucedan problemas y esto nos genera horas y horas de trabajo buscando el error, en algunas ocasiones lo solucionamos rápido pero en otras nos toma días. Este tiempo que gastamos encontrando el problema se puede reducir haciendo uso de pruebas unitarias.
¿Qué son pruebas unitarias?
Las pruebas unitarias son un conjunto de líneas de código que se encargan de hacer un test en una función o método determinado, es decir si se está realizando una función para sumar dos números entonces nosotros desde nuestra prueba unitaria llamaremos esa función y le enviaremos los parámetros en caso de que los necesite. Al principio podemos pensar que nos demoraremos más en el desarrollo pero no es así ya que estas pruebas no deben tomar más de 5 minutos.
Bueno vamos agregar un proyecto de consola con algunos mensajes y un método que nos indique si un número es positivo, nuestra clase Program.cs quedará así
public class Program { static void Main(string[] args) { Console.WriteLine("Hola Mundo"); Console.ReadKey(); } public bool checkPositiveNumber(int pNumber) { if (pNumber > 0) { return true; } else { return false; } } }
Para agregar UnitTest lo podemos hacer manual y automático.
Manual
Daremos click derecho sobre la solución y agregaremos un nuevo proyecto de tipo «Unit Test»
Damos click derecho sobre el proyecto de Unit Test y agregamos una referencia al otro proyecto
En este caso lo encontraremos en la sección de «solución», cabe destacar que nuestras pruebas unitarias pueden estar en otra solución
Una vez agregada la referencia podemos observar que aparece un nuestro proyecto en la sección de referencias
Automático
Damos click derecho sobre nuestra clase Program.cs y seguidamente en «Create Unit Tests»
Nota: En caso de trabajar con una versión de Visual Studio menor a 2015 deben instalar este componente
Ahora vamos a abrir la clase *.cs que tenemos en el proyecto Unit Test y agregaremos el siguiente código
[TestClass] public class NombreClase { [TestMethod] public void NombreMetodo() { // Arrange var objProgram = new Program(); bool result = false; // Act result = objProgram.checkPositiveNumber("1a"); // Assert Assert.IsTrue(result); } }
Vamos analizar el código anterior ya que estamos utilizando decoradores, el [TestClass] indica que dentro de esta clase hay código que va realizar pruebas y [TestMethod] lo deben llevar los métodos de prueba.
Además de los decoradores estamos destacando tres secciones con comentarios:
- Arrange: Acá vamos a realizar las configuraciones del código, por ejemplo instanciar objetos, declarar variables, entre otros.
- Act: Acá se ejecuta nuestras acciones por ejemplo llamar métodos o funciones.
- Assert: Acá es la sección donde probamos el resultado de nuestro código, la clase Assert es la encargada de verificar las condiciones en nuestras pruebas.
Volviendo a nuestro código cuando agregamos una prueba debemos compilar el código ya sea dando click en el menú «Build» y luego en «Build Solution» o presionando «CTRL» + «SHIFT» + «B»
Una vez que es compilado podremos ejecutar la prueba, podemos dar click derecho sobre el archivo y luego en «Run Tests»
Iniciará el proceso de pruebas
Cuando finaliza nos informa si ha concluido exitosamente u ocurrió un fallo
En nuestro código todo esta bien sin embargo vamos a modificarlo un poco para que pueda ocurrir un error y lo podamos encontrar con Unit Test. Nuestra clase Program.cs quedará así:
public class Program { static void Main(string[] args) { Console.WriteLine("Hola Mundo"); Console.ReadKey(); } public bool checkPositiveNumber(string pNumber) { int number = int.Parse(pNumber); if (number > 0) { return true; } else { return false; } } }
En el método checkPositiveNumber hemos cambiado el tipo de parámetro que recibe de int a string y dentro de la función hacemos un parse a int , pero esto puede causar un error si se envía un valor que no pueda ser convertido a int. Ahora vamos a nuestro unit test y modificamos el código de la llamada a la función.
result = objProgram.checkPositiveNumber("1");
Si ejecutamos la prueba va a realizarse con éxito pero si enviamos un carácter que no debemos no pasará la prueba
result = objProgram.checkPositiveNumber("1a");
De manera que nuestra clase queda así
[TestClass] public class NombreClase { [TestMethod] public void NombreMetodo() { // Arrange: donde se configura el código var objProgram = new Program(); bool result = false; // Act: se ejecuta el código result = objProgram.checkPositiveNumber("1a"); // Assert: donde se prueba el resultado Assert.IsTrue(result); } }
Cuando ejecutamos la prueba vamos a ver que fallo
El error podemos solucionarlo implementando un bloque try-catch, llamando a la función int.TryParse o como nosotros veamos conveniente.
Bueno hemos aprendido como realizar nuestras pruebas unitarias en Visual Studio espero que les sea de ayuda 🙂
1 comentario en “Unit Test + Visual Studio”