[Evento] Conferencia Agile Spain 2010

Como ya comentaba mi compañero Jose Luis Soria los próximos 10 y 11 de junio se celebrará en Madrid la conferencia Agile Spain 2010.

Las sesiones, talleres y ponentes prometen y puede ser un buen sitio para ponerse al día en muchos aspectos relacionados con el desarrollo ágil de software.

La conferencia se estructura en una serie de sesiones, y en varios talleres donde se podrá profundizar y ponerse manos a la obra en temas específicos.

Plain Concepts tendrá una presencia destacada en el evento, tanto a nivel de patrocinio, como participando como ponentes en distintas sesiones y talleres.

Jose Luis Soria, Rodrigo Corral y yo mismo participaremos como ponentes en las conferencias.

José Luis se ha cargado de valor y tendrá dos sesiones y un taller. Las sesiones son “Gestión ágil de la configuración” y “Gestión ágil de requisitos – construyendo nuestro backlog”, y el taller “Construcciones automatizadas e integración continua en entornos Microsoft”.

Por su parte, Rodrigo tendrá dos sesiones: “Control de proyectos y métricas en las metodologías ágiles” y “Diez maneras infalibles de asegurar que Scrum será un fracaso”.

Y por último, yo hablaré de “Herramientas avanzadas de testeo unitario: Pex y Moles”.

Todavía estáis a tiempo de inscribiros!

Pruebas unitarias en C++ no manejado

Más de una vez me han preguntado sobre si es posible realizar pruebas unitarias con Visual Studio para código C++ no manejado y si entre cosas, es posible obtener la cobertura de código.

En más de un sitio ya he leído que no se puede, cosas que no es cierta.

Eso sí, cierto es que dentro de las nuevas funcionalidades que ha ido surgiendo en cada nueva versión de Visual Studio, C++ no manejado es muchas veces uno de los grandes olvidados..y muchas de las características no son soportadas para este lenguaje…pero bueno, contra esta situación poco se puede hacer.

Bien, el primer paso que vamos a hacer es crearnos nuestra primera dll de C++, a la que posteriormente le añadiremos una prueba unitaria. Yo el ejemplo lo haré con Visual Studio 2010, aunque sería igual para las versiones 2005 y 2008.

Nuevo Proyecto>Visual C++>Win32>Win32 Console Application.

image

image 

Una vez hecho esto, ya tenemos nuestra dll creada y salvo que le hayáis indicado que os lo genere vacío, tendréis un método y clase de ejemplo…Nosotros haremos una prueba unitaria sobre uno de estos métodos que se crean por defecto:

// This is an example of an exported function.
GEEKSDLL_API int fnGeeksDll(void)
{
    return 42;
}

Si esto fuera código manejado y os pusierais sobre el método y sacarais el menú contextual, os saldría una opción para crear una pruebas unitaria….acción que crearía un nuevo proyecto de Test, una clase y una primera unitaria con el esqueleto de llamada al método.

Esta acción no existe para C++ no manejado. Tenemos que crear nosotros el proyecto de Test y el TestMethod para hacer la prueba unitaria.

Aunque hay alguna otra forma de crear pruebas unitarias para C++ no manejado, considero que la opción más cómoda es usar C++/CLI a la hora de crear el proyecto de Test, ya que desde este lenguaje manejado podremos hacer llamadas a nuestro código no manejado sin mucho esfuerzo.

Add New Proyect>Visual C++>Test>TestProject

image

Al crear el proyecto de test no creada una clase de test (TestClass) y una prueba unitaria de ejemplo (TestMethod), prueba que usaremos para el ejemplo.

        [TestMethod]

        void TestMethod1()

        {

            //

            // TODO: Add test logic here

            //

        };

Por defecto, el proyecto no va a permitir hacer llamadas a código no manejado. Para permitir esta acción tenemos que ir a las propiedades del proyecto de Test, a las opciones generales y cambiar la propiedad “Common Language Runtime Support”, estableciendo su valor a “/clr”.

image

Una vez hecho esto, en el proyecto de test tenemos que añadir una referencia al proyecto a testear.

 image

Una vez hecho esto, en la clase de test, dónde tenemos nuestra prueba unitaria, tendremos que incluir el h que contiene los métodos de nuestra dll a testear, métodos a los que llamaremos desde la prueba unitaria.

#include "..GeeksDllGeeksDll.h"

Ya está, ya podemos hacer la llamada al método a testear:

        [TestMethod]
        void TestMethod1()
        {
            int expected = 42;
            int actual = fnGeeksDll();
            Assert::AreEqual(expected, actual);
        };

Haciéndolo de esta manera, con un proyecto de C++/CLI, nos podemos beneficiar del framework de pruebas unitarias de Visual Studio y tener testeados nuestros desarrollos en C++ no manejado.

Para aquellos que no conozcan lo que el framework ofrece os pongo este enlace con información.

Pero…y la cobertura?? Tengo que hacer algo especial para poder obtener la cobertura??? Pues sí, también hay que tener en cuenta una pequeña cosa.

Para poder tener cobertura, es necesario activar la opción Profile en el proyecto de C++.

Esta opción se activa en las propiedades del proyecto, dentro de las opciones avanzadas del linker.

 

image

Una vez hecho esto, activamos la cobertura de código en los settings (Local.testsettings) y volvemos a ejecutar el test unitario.

image

Eso sí, el código no se colorea en función de si el código esta cubierto por la prueba o no :-(