Buscar este blog

jueves, 3 de febrero de 2011

Pruebas unitarias con Nunit

Las pruebas unitarias son muy importantes en el proceso de desarrollo de una aplicación, para realizarlas podemos usar las herramientas incluidas en Visual Studio, pero no todas las versiones tienen esta característica, y por supuesto esta la gente que no usa Visual Studio, Aquí es donde entra Nunit que es un framework para realizar pruebas unitarias que no depende en lo absoluto de Visual Studio.
Nunit es la version para Net Framework del original Junit que es la versión para Java y se puede obtener de la pagina oficial de Nunit.
Una vez instalado creamos de preferencia un proyecto separado para nuestras pruebas este proyecto puede  ser preferentemente de tipo librería de clases ya que toda la interacción con nuestras pruebas se hace usando el ejecutable de Nunit, A este proyecto añadimos una referencia a la dll nunit .framework.dll que se encuentra en el directorio en que se instalo Nunit (no en el GAC), también añadimos una referencia al proyecto que vamos a probar y empezamos a crear las pruebas.
La forma básica en que se crea una prueba es creando una clase que tiene aplicado el atributo TestFixture a esta clase le añadimos métodos con el atributo Test aplicado estos métodos son los que utilizaremos para crear las pruebas por supuesto podemos añadir también clases y métodos sin los atributos mencionados que podrían ser para ayudar en el proceso de prueba.
En nuestros métodos de prueba lo que haremos es usar los métodos de Nunit para comprobar que nuestras clases den los resultados esperados, el mas comúnmente usado es el metodo AreEqual de la clase Assert de Nunit que compara una variable contra un valor esperado.
Aquí esta el ejemplo, lo primero que les muestro es la clase que vamos a probar:


   1:  namespace Prueba.Data {
   2:      public class User {
   3:          public string Name { get; set; }
   4:          public string Password { get; set; }
   5:          public User(string name, string password) {
   6:              Name = name;
   7:              Password = password;
   8:          }
   9:      }
  10:  }

Y después nuestra clase de prueba:


   1:  using NUnit.Framework;
   2:  using Prueba.Data;
   3:   
   4:  namespace NunitTests {
   5:      [TestFixture]
   6:      public class UserTest {
   7:          [Test]
   8:          public void ConstructorTest() {
   9:              User user = new User("Pedro", "secreto");
  10:              Assert.AreEqual("Pedro", user.Name);
  11:              Assert.AreEqual("secreto", user.Password);
  12:          }
  13:      }
  14:  }

Una vez que tenemos listas las pruebas compilamos el proyecto y abrimos el ejecutable de Nunit con el que se realizaran las pruebas.
En Nunit usamos el menú File -> Open Project y abrimos la dll que se genero al compilar el proyecto, en el panel izquierdo aparecerá un árbol que contiene todos los métodos que creamos para las pruebas en una jerarquía que sigue a la del proyecto, podemos ejecutar un solo método una rama del arbol o todas las pruebas a la vez.
En este caso solo tenemos una prueba presionamos el botón Run y se ejecutara el proyecto de pruebas una barra de progreso nos muestra el porcentaje de pruebas ejecutadas según se van ejecutando y el color verde nos indica que ninguna ha fallado en caso contrario cambiara a color rojo.
Si al final hubo errores se mostraran en el árbol y en los paneles inferiores mostrando la prueba que fallo e información acerca de el error incluyendo la posición en el código que fallo, también podemos depurar el código en la ejecución usando el depurador de Visual Studio u otro depurador escogiendo la instancia de Nunit como el ejecutable a depurar.



Por supuesto NUnit puede probar muchas más cosas que la igualdad de miembros, por ejemplo algo muy útil es que puede probar cuando un método manda una excepción en el momento adecuado, pero la API de NUnit es muy amplia para un blog y lo mejor es que te dirijas a la documentación de NUnit para la última versión para una mejor referencia.
Para aprender más acerca de las pruebas unitarias con .Net Framework visita:
Lista de artículos acerca de pruebas unitarias con .Net Framework

No hay comentarios:

Publicar un comentario