TDD: Primeros pasos en Visual Studio

He estado escribiendo algunos posts sobre TDD (Test-Driven Development) relacionados con el curso en preparación del Proyecto Hogwarts. La idea es publicar el material del curso presencial que se está armando en ese proyecto, para que quede en línea en un sitio público. Mientras tanto, sigo adelantando algunos temas por acá.

Recordemos el primer ejemplo, en video:

Un ejemplo de TDD

Quisiera repasar unos simples puntos, en este post. Primero, en ese ejemplo trabajamos con Visual Studio 2008, y con las facilidades de test que tiene ese entorno en una versión Architect. Deberíamos explorar en algún momento de escribir test con otras librerías, y en otros entornos, lenguajes (como Java/Eclipse). En el ejemplo presentado (ver el post, el video, y ahí el código para bajar), se armaron dos proyectos:

 

Uno es un proyecto de librería de clases, y el segundo es un proyecto de test:

 

(Recordemos: no todas las versiones del Visual Studio soportan este tipo de proyecto. Está disponible a partir de la versión Architect. Tendremos que estudiar alternativas de código abierto, como NUnit, que varían en los detalles pero con conceptos similares).

El código que van a ver que se terminó generando en el ejemplo, es:

using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Calculator.Tests
{
 [TestClass]
 public class CalculatorTests
 {
 [TestMethod]
 public void AddTwoNumbers()
 {
 Calculator calculator = new Calculator();
 int result = calculator.Add(2, 3);
 Assert.AreEqual(5, result);
 }
 [TestMethod]
 public void AddManyNumbers()
 {
 Calculator calculator = new Calculator();
 for (int k = 1; k <= 10; k++)
 {
 int j = k + 1;
 int result = calculator.Add(k, j);
 Assert.AreEqual(k + j, result);
 }
 }
 }
}


¿Qué hay para destacar de este código? Primero, el uso de atributos como [TestClass] y [TestMethod]. Estos son los atributos iniciales que estamos utilizando. Tendremos que estudiar otros, y cómo hay atributos similares en otras librerías, como NUnit. Pero ¿qué son estos atributos? Son la forma que tiene este entorno de implementar dos soluciones de frameworks de TDD, a dos problemas: ¿cómo identificar un test? ¿cómo agruparlos?



Lo que usa Visual Studio (y NUnit y otros), es hacer que cada test esté implementado como un método. No es un programa, es un método. Y para ubicar el método y distinguirlo de otros, usamos el atribute [TestMethod].



También este entorno tiene la facilidad de ejecutar un método, o todos los métodos de la solución. Pero también puede ejecutar los tests que están en una clase. Los métodos de tests no están “flotando” en cualquier clase, sino en las que están marcadas con el atributo [TestClass].



En nuestro tercer video:



Ejemplo de TDD: Implementando una Pila (Parte 2)



aparecieron nuevos atributos, como [TestInitialize]. Tendremos que explicarlos y repasarlos, en un próximo post, y escribir tests usando otros atributos. Comenzaremos a entender, entonces, el funcionamiento de un framework de tests (como cuándo crea una instancia de objeto de la clase tests, cómo invoca los métodos de tests, el ciclo de vida de las variables del objeto de test, el uso de archivos externos, etc..)



Nos leemos!



Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 11699, 13620, 1389. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>