Pruebas Unitarias con NUnit

by ryudice on April 11, 2010

NUnit es una migracion del famoso framework para pruebas unitario, JUnit, de Java. Actualmente Visual Studio ya trae un framework integrado para pruebas unitarias pero yo prefiero NUnit, es mas natural, aparte que proviene de JUnit un framework que tiene bastante de existir por lo que es mas maduro.

La pruebas en NUnit se definen por medio de atributos en una clase, para darles un ejemplo:

namespace NUnit.Demostracion
{
    [TestFixture]
    class OperacionesAritmeticasTests
    {
        private OperacionesAritmeticas _operacionesAritmeticas;
 
        [SetUp]
        public void Inicializar()
        {
            _operacionesAritmeticas = new OperacionesAritmeticas();
        }
 
        [Test]
        public void Probar_suma()
        {
            int resultado = _operacionesAritmeticas.Sumar(2,2);
            Assert.AreEqual(resultado,4);
        }
    }
}

Para ejecutar las pruebas peuden usar el Test tunner que trae Nunit, primero que anda descarguen NUnit, este es el link para descargar NUnit, les recomiendo que bajen el instalador.

Una ves descargado e instalador puede agregar una referencia en cualquier proyecto.

Por convencion, generalmente cualquier clase que contenga pruebas debe llevar el sufijo “Test”, por ejemplo, si quiero probar una clase que se llama Empleado la clase de pruebas se debe llamar “EmpleadoTest”.

Creando una prueba de ejemplo

Empiezen por agregar una nueva clase a su proyecto. Una ves tengan la clase agreguen el atributo [TestFixture] a la clase asi como aparece en el ejmplo de arriba, esto quiere decir que es una clase de pruebas.

Luego agreguen un metodo llamado Inicializar con void de retorno, a este metodo apliquen el atributo [SetUp], esto quiere decir que este metodo se ejecutara automaticamente cuando ejecutemos cualquier pruebas, generalmente esto se usa para la creacion de los objetos que se van utilizar en la prueba.

Ahora vamos agregar nuestro Test, puede ser cualquier cosa, solo asegurente que el retorno del metodo sea void, y agreguenle el atributo [Test].

Una ves tenga el metodo, para verificar si la prueba pasa o no se utilizan las funciones de la clase estatica Assert. Como pueden ver en el ejemplo de arriba, usando Assert.AreEqual verifico si el resultado es 4, si no lo es, la rpueba falla. La clase Assert contiene otros metodos que pueden utilizar para comparacion.

Ejecutando las pruebas

Yo utilizo resharper para ejecutar las pruebas ya que es muy sencillo pero no es gratis. NUnit incluye un test runner, si bajaron el instalador les debio haber creado un acceso directo en el menu inicio, abran el test runner, la ventana se ve asi:

image

En esta pantalla lo que tenemos que hacer es cargar nuestro DLL que contiene las pruebas, los proyectos de prueba generalmente son un proyecto de libreria en el visual studio, por lo que me deberia de gener un DLL, este DLL lo abro en el testrunner y automaticamente me carga todas las pruebas.

image

Luego solo le dan clic en run para ejecuta la prueba seleccionada(s).

{ 0 comments }

Zoom it es una aplicacion gratis para podes hacer zoom en presentaciones cuando esten proyectando algo, hace poco lo descubri y esta bastante util.

Abajo les dejo una demostracion de lo que hace, ese zoom que ven no es del camtasia si no con Zoom it, como podran ver tambien pueden dibujar y escribir texto.

Descargar Zoomit.

{ 0 comments }

Selenium es una herramienta para automatizar las pruebas de interfase grafica (GUI) en aplicaciones web. Por ejemplo, si usted tienen un formulario web en ves de estarlo llenando cada ves que lo quieren probar pueden usar selenium para automatizar el llenado del formulario, solo corren la prueba yt odos los campos se llenan automaticamente, y luego se envian. Abajo les dejo un video corto para que vea como funciona.

En el video uso selenium para rellenar automaticamente el formulario de suscripcion de hotmail, el boton rojo es para empezar a grabar, y desde ese momento todo lo que escriban o clics que hagan en la ventana del navegador seran guardados en selenium, luego los pueden editar.

Esto sirve mucho para esos casos en los que nuestra aplicacion tiene un formulario de 20 campos o mas y no queremos tener que estarlos llenando a mano cada ves que queramos saber si guarda la informacion. Las pruebas de selenium tambien se pueden correr automaticamente dentro de pruebas unitarias en el visual studio pero eso es tema para otro post.

Ya se me olvidaba lo mas importante, el link para descargar selenium.( es el que dice Selenium IDE y es un addon para firefox asi que si tienen otro navegador es buen momento para cambiarse.)

{ 0 comments }

Usando Reflection en C#

by ryudice on March 28, 2010

Que es Reflection?

Reflection es una “tecnica”, se podria decir, para poder extraer la metadata de nuestras clases dentro de una assembly, por ejemplo, teniendo una clase llamada Persona, asumiendo que yo no se que propiedades tiene esta clase solo se el nombre, utilizando reflections puede obtener una lista de todas las propiedades que posee esta clase y asi mismo obtener sus valores.En el .net Framework, las clases de reflection se encuentran dentro del namespace System.Reflection.

Que es metadata?

Meta data es la descripcion sobre nuestros datos, por ejemplo, en una base de datos podemos tener una columna en nuestra tabla, y luego tener la descripcionq ue dice que es la columna, en este caso la metadata seria la descripcion de nuestra columna.

Para que sirve?

Bueno muchos de los frameworks usan reflection y ni nos damos cuenta, sirve en casos de uso donde se necesita automatizar ciertas actividades.

Un caso de uso comun es el mapeo de valores, a continuacion un ejemplo:

    class Program
    {
        static void Main(string[] args)
        {
            var atributosPersona = new Dictionary<string  ,STRING>();
            atributosPersona.Add("Nombre","Roberto Javier");
            atributosPersona.Add("Apellido","Yudice");
 
            var persona = new Persona();
 
            foreach (var atributo in atributosPersona)
            {
                PropertyInfo propertyInfo = persona.GetType().GetProperty(atributo.Key);
                propertyInfo.SetValue(persona,atributo.Value,null);
            }
 
            Console.WriteLine("Nombre Persona: {0}",persona.Nombre);
            Console.WriteLine("Nombre Persona: {0}",persona.Apellido);
 
        }
    }
 
    internal class Persona
    {
        public String Nombre { get; set; }
        public String Apellido { get; set; }
    }

 

El resultado del codigo de arriba es el siguiente:

image

Como podran ver, asigne valores a las propiedades de mi clase dinamicamente.

Explicacion

Bueno primero que nada creo una diccionario que contiene el nombre de la propiedad de mi clase y el valor que le quiero asignar.

Luego hago un foreach que recorrera cada uno de los elementos del diccionario.

Dentro del foreach ocupo persona.GetType() para obetener el tipo de mi clase. Esto es muy importante y es el corazon de Reflection, siempre que quieran utilizar reflection lo primero es obtener el tipo de su objeto.

La clase Type contiene todo el conjunto de metadatos de la clase, por ejemplo, sus propiedades, sus metodos, atributos, etc. Para obtener el tipo de un objeto hay diferentes maneras, las mas comunes son:

La funcion GetType, es uan funcion que tiene cualquier variable y retorna un objeto Type.

Si solo saben el nombre de la clase y no tienen ningun objeto de ese tipo instanciado pueden usar typeof(Persona), donde Persona es el nombre de su clase.

Sobre el objeto Type de mi clase persona, llamo el metodo GetProperty el cual lleva como parametro el nombre de mi propiedad y retorna un objeto PorpertyInfo, que como su nombre lo dice, es la metadata sobre la propiedad. Con este mismo objeto podemos asignarle un valor a la propiedad de un objeto.

Ya una ves tengo mi objeto PropertyInfo, utilizo la funcion SetValue la cual lleva como parametro primero la instancia del objeto al que le quiero asignar el valor a la propiedad y segundo el valor que deseo asignar. El ultimo parametro que va null es para asignar valores a propiedades indexadas, en palabras simples, en el valor que va dentro de [] en un array, en mi caso mi propiedad no es indexada, por eso le mando null.

El Mito de reflection

Hay una creencia de que usar reflection es lento, la verdad es que quizas lo fue alguna ves pero con los procesadores actuales y avances en la arquitectura de las plataformas como .NET el costo de usar reflection es minimo, muchos frameworks lo usan como ASP.NET MVC, NHibernate, entre otros.

{ 0 comments }

Resaltado de sintaxis en Firebug

by ryudice on March 28, 2010

FireRainbow es un plugin de firefox para poder resaltar la sintaxis en la prestania de Script de firebug, ya que por defecto firebug muestra todo en negro sin resaltar el codigo propio del lenguaje

Sin FireRainbow

image

Con FireRainbow

image

Descargar FireRainbow

{ 0 comments }

Como simular peticiones HTTP Ajax

by ryudice on March 27, 2010

Si necesitan testear una funcionalidad de su sitio web que solo se muestra cuando la peticion es XHR, por ejmplo en el caso de un controlador de asp.net MVC con el siguiente codigo

        public ActionResult Index() {
            IList<producto> productos = productoRepository.GetAll();
            if (Request.IsAjaxRequest())
            {
                return Json(productos);
            }
            return View(productos);
        }

Si pueden ver el resultado es diferente dependiendo de si la peticion fue una peticion normal o una peticion AJAX, en el caso de esta ultima, retorno un resultado JSON de mi lista de productos. Otro escenario seria en Rails con el siguiente controlador:

  def show
    @post = Post.find(params[:id])
 
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml =&gt; @post }
    end
  end

En ambos casos los resultados son diferentes dependiendo del tipo de la peticion (Request) Ahora si queires comprobar que de verdad se este diferenciando entre el tipo de peticion o simplemente quieren ver el resultado de la otra peticion puede descargar este addin para firefox llamado HTTP Resource Test.

image

En la ventana principal solamente le ponen el chequesito a “Simulate AJAX Request”, para enviar la peticion como que si fuera AJAX y el resultado se muestra en el textbox de abajo que dice “Reply”.

Descargar addin HTTP Resource Test

{ 0 comments }

Si se les llega a dar la situacion de que necesitan mover de lugar una funcion o metodo de una clase y no quieren tener que avisarles a todos sus companeros, pueden usar el atributo “Obsolete” del framework, de la siguiente mangera:

        [Obsolete("Ya no me usen mamones")]
        public void NoUsarme()
        {
            Application.Exit();
        }

 

Esto hara que al momento de compilar se muestre una adventencia mostrando el mensaje que esta en el atributo, pero siempre dejara compilar el programa. Si lo que quieren es que no se pueda compilar hasta que ya no halla ninguna clase que utiliza la funcion entonces especifican “true” en el segundo parametro del atributo, asi:

        [Obsolete("Ya no me usen mamones",true)]
        public void NoUsarme()
        {
            Application.Exit();
        }

 

Ahora el compilador tirara un error cuando traten de compilar la aplicacion.

{ 0 comments }

Preview de Internet Explorer 9

by ryudice on March 18, 2010

En la conferencia MIX la cual esta teniendo lugar en estos momentos Microsoft mostros un preview de Internet Explorer 9, segun noticias parece que al fin Microsoft esta haciendo todo bien, ya que soporta HTML5, el engine de javascript se le compara al de Firefox y al de otros navegadores basados en webkit (Google y safari), lo cual es bastante considerando que ni siquiera es una version beta. Tambien incluye soporte para vectores para el cual se usa el API de Direct2D del Direct X, por lo que se espera que este motor sea muy superior al mismo de cualquier otro navegador.

Pueden descargar el preview pero conste que esta tan incompleto que ni siquiera trae barra de direcciones, tienen que irse al menu Page.

{ 0 comments }

ASP.NET MVC 2 lanzado!

by ryudice on March 15, 2010

La version 2.0 de ASP.NET MVC  fue lanzada oficialmente ayer, trae muchas mejoras sobre la version 1.0, puede ser descargada desde la pagina oficial de asp.net

{ 0 comments }

A partir de la version 2.o del .NET framework se agrego un nuevo concepto conocido como clases parciales o partial classes en ingles, en palabras simples, esto sirve para poder dividir la definicion de una clase en diferentes archivos, por ejemplo:

En mi archivo 1 yo puedo tener lo siguiente:

namespace Ejemplo.ClasesParciales{
 
	public partial class Persona{
 
		private string _nombre;
		private string _apellido;
 
	public string GetNombre(){
		return _nombre;
	}
 
}

Despues en otro archivo yo tengo :

namespace Ejemplo.ClasesParciales{
 
	public partial class Persona{
 
		public string GetApellido()
		{
			return _apellido;
		}
 
}

Si se fijan ambas clases tienen el mismo nombre y se encuentran en el mismo espacio de nombre, por medio de la palabra “partial” yo declaro que es una clase parcial,y al hacer esto los miembros de los dos archivos se combinan en una sola clase. Noten tambien que no tienen miembros o metodos con el mismo nombre, si este fuera el caso entonces tira un error el compilador.

Las clases parciales se usan mas que todo para extender con nuevos miembros o funciones las clases que genera el visual studio, un ejemplo de esto son las clases que genera LINQ to SQL o el entity framework, todas estas clases son parciales, de esta manera definiendo clases parciales en otros archivos pueden agregar nuevas caracteristicas a los objetos sin que les caigan encima cada ves que generen o agreguen una nueva tabla al esquema.

{ 0 comments }

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

PensandoEnCodigo is Digg proof thanks to caching by WP Super Cache