Etiquetas

, , ,

Hoy dia la importancia e los test unitarios es algo que no tiene discusión, cada vez más los desarrollos van incorporando estas pruebas que hace unos años nos podrían sonar a cosas raras.

Lo cierto es que es una buen forma para testear las aplicaciones, y lo que es más es una forma de desarrollar documentando lo que hace un programa. Como dice Bruno Capuano “un programa hace lo que dicen sus pruebas unitarias”.

Ahora bien, cuando nos ponemos a realizar las pruebas podemos caer en el error de querer ahorrar tiempo de desarrollo de pruebas haciendo pruebas que invoquen a un método que invoca a otro o incluso se conecta a la base de datos.

Este error es tal, porque estamos haciendo dependientes nuestras pruebas de la base de datos y de que esté levantada y funcionando correctamente. También es un error porque estamos viendo como este método se comunica con otro y por tanto nuestra prueba depende del buen funcionamiento del método intermedio.

Para evitar eso, podemos hacer uso de Microsoft.Fakes. Esta librería nos permite falsear una librería haciéndola que devuelva lo que queramos, para probar un método que suma una lista de enteros es más fácil que podamos probar con una lista de tres elementos que sabemos lo que suman que con una columna de una tabla de la base de datos que puede variar y que las pruebas fallen o sean dependientes de los valores de dicha tabla.

Pues bien, creo que la problemática está bien clara y por lo tanto vamos al grano.

En nustro ejemplo vamos a falsear un repositorio que en su método GetQuantities, nos devuelve una lista de enteros que debemos sumar (Es cierto, podríamos haber hecho un List.Sum(x=>x.Quantity), pero para el ejemplo nos valdría.

En la prácitca deslegaremos las referencias de nuestro proyecto y hacemos click con el botón derecho sobre la referencia de infraestructura de datos. Elegimos la opción de Add Microsoft.Fakes.

y vemos que se nos añade una referencia y otra en la carpeta de Fakes.

a partir de ahora en nuestro código instanciaremos un stub del repositorio.

IRepositorySub myfakeRepository=new RepositoryStub();

luego falsearemos el método que invocará..

myfakeRepository.GetQuantities=()=>{

list.Add(1);

list.Add(4);

return list;

};

Posteriormente en la prueba de test haremos;

[TestMethod]

public void mytest(){

Iclase obj=Ioc.Resolvez<IClasa>();

int result=obj.sum();

Assert.AreEqual(5,result);

}

y con eso tenemos probado el método.

Espero que haya sido ilustrativo, espero poder contar con tiempo para podre contaros en detalle que es un stub y un shims.

Anuncios