Escribir pruebas unitarias para C/C++ en Visual Studio

Puede escribir y ejecutar pruebas unitarias de C++ en la ventana Explorador de pruebas. Funciona igual que con otros lenguajes. Para más información sobre cómo usar el Explorador de pruebas, vea Ejecutar pruebas unitarias con el Explorador de pruebas.

Nota

C++ no admite algunas características como Live Unit Testing, las pruebas de IU codificadas e IntelliTest.

Visual Studio incluye estos marcos de pruebas de C++ sin que sea preciso descargar nada más:

  • Marco de pruebas unitarias de Microsoft para C++
  • Google Test
  • Boost.Test
  • CTest

Puede usar los marcos instalados o escribir su propio adaptador de prueba para cualquier marco que quiera usar en Visual Studio. Un adaptador de prueba integra pruebas unitarias con la ventana Explorador de pruebas. En Visual Studio Marketplace hay disponibles varios adaptadores de terceros. Para más información, vea Instalar marcos de prueba unitaria de terceros.

Visual Studio 2017 y versiones posteriores (Professional y Enterprise)

Los proyectos de prueba unitaria de C++ admiten CodeLens.

Visual Studio 2017 y versiones posteriores (todas las ediciones)

  • Google Test se incluye como un componente predeterminado de la carga de trabajo de Desarrollo para el escritorio con C++ . Tiene una plantilla de proyecto que se puede agregar a una solución. Haga clic con el botón derecho en el nodo de la solución en el Explorador de soluciones y seleccione Agregar>Nuevo proyecto en el menú contextual para agregar la plantilla de proyecto. También tiene opciones que puede configurar a través de Herramientas>Opciones. Para obtener más información, vea Cómo: Utilizar Google Test en Visual Studio.

  • Boost.Test se incluye como un componente predeterminado de la carga de trabajo de Desarrollo para el escritorio con C++ . Se integra con el Explorador de pruebas, pero actualmente no tiene una plantilla de proyecto. Debe configurarse de forma manual. Para obtener más información, vea Cómo: Utilizar Boost.Test en Visual Studio.

  • La compatibilidad con CTest se incluye con el componente Herramientas de CMake en C++ , que forma parte de la carga de trabajo de Desarrollo para el escritorio con C++ . Para obtener más información, vea Cómo: Utilizar CTest en Visual Studio.

Versiones anteriores de Visual Studio

Puede descargar las extensiones de los adaptadores Google Test y Boost.Test en Visual Studio Marketplace. Las encontrará en Test Adapter para Boost.Test y Test Adapter para Google Test.

Flujo de trabajo de prueba básico

En las siguientes secciones se explican los pasos básicos que sirven para empezar a realizar pruebas unitarias de C++. La configuración básica es similar en las plataformas de Microsoft y Google Test. Boost.Test, por su parte, requiere que se cree un proyecto de prueba manualmente.

Creación de un proyecto de prueba en Visual Studio 2022

Defina y ejecute las pruebas unitarias en uno o varios proyectos de prueba. Un proyecto de prueba crea una aplicación independiente que llama al código del archivo ejecutable e informa sobre su comportamiento. Cree los proyectos de prueba en la misma solución que el código que quiere probar.

Para agregar un nuevo proyecto de prueba a una solución existente,

  1. Haga clic con el botón derecho en el nodo de la solución en el Explorador de soluciones.
  2. En el menú emergente, elija Agregar>Nuevo proyecto.
  3. Establezca el valor de Lenguaje en C++ y escriba "prueba" en el cuadro de búsqueda. En la siguiente ilustración se muestran los proyectos de prueba que hay disponibles cuando se instala la carga de trabajo Desarrollo para el escritorio con C++ y Desarrollo para UWP:

C++ Test Projects in Visual Studio 2022

Creación de un proyecto de prueba en Visual Studio 2019

Defina y ejecute las pruebas en uno o varios proyectos de prueba. Cree los proyectos en la misma solución que el código que quiere probar. Para agregar un nuevo proyecto de prueba a una solución existente,

  1. Haga clic con el botón derecho en el nodo de la solución en el Explorador de soluciones.
  2. En el menú emergente, elija Agregar>Nuevo proyecto.
  3. Establezca el valor de Lenguaje en C++ y escriba "prueba" en el cuadro de búsqueda. En la siguiente ilustración se muestran los proyectos de prueba que hay disponibles cuando se instala la carga de trabajo Desarrollo para el escritorio con C++ y Desarrollo para UWP:

C++ Test Projects in Visual Studio 2019

Crear referencias a otros proyectos en la solución

Para permitir el acceso a las funciones en el proyecto en pruebas, agregue una referencia al proyecto en el proyecto de prueba. Haga clic con el botón derecho en el nodo de proyecto de prueba del Explorador de soluciones para ver un menú emergente. Elija Agregar>Referencia. En el cuadro de diálogo Agregar referencia, elija los proyectos que quiera probar.

Add reference

Si el código de prueba no exporta las funciones que quiere probar, agregue los archivos de salida .obj o .lib a las dependencias del proyecto de prueba. Para obtener más información, vea Para vincular las pruebas a los archivos de biblioteca u objeto. No incluya archivos objeto que tengan una función main u otro punto de entrada estándar, como wmain, WinMain o DllMain. Al agregar nuevos archivos de código fuente al proyecto, actualice las dependencias del proyecto de prueba para incluir los archivos objeto correspondientes.

Agregar directivas #include de archivos de encabezado

Después, en el archivo .cpp de prueba unitaria, agregue una directiva #include relativa a cualquier archivo de encabezado que declare los tipos y funciones que quiera probar. Escriba #include " y, de este modo, IntelliSense se activará para ayudarle a elegir. Repita esto mismo para los encabezados adicionales.

Screenshot of the Solution Explorer showing an #include directive being added with IntelliSense highlighting a header file for inclusion.

Para evitar tener que escribir la ruta de acceso completa en cada instrucción include en el archivo de código fuente, agregue las carpetas necesarias en Proyecto>Propiedades>C/C++>General>Directorios de inclusión adicionales.

Escribir métodos de prueba

Nota

En esta sección se muestra la sintaxis del marco de pruebas unitarias de Microsoft para C y C++. Se documenta aquí: Referencia de API Microsoft.VisualStudio.TestTools.CppUnitTestFramework. Para obtener documentación sobre Google Test, vea Google Test Primer. Para Boost.Test, vea Boost Test library: The unit test framework (Biblioteca de Boost.Test: el marco de pruebas unitarias).

El archivo .cpp del proyecto de prueba tiene un método y una clase de código auxiliar definidos automáticamente. Muestran un ejemplo de cómo escribir código de prueba. Las firmas usan las macros TEST_CLASS y TEST_METHOD, lo que hace que los métodos se puedan detectar desde la ventana Explorador de pruebas.

Screenshot of the Test Explorer window that shows the unittest1.cpp code file containing a stub class and method using the TEST_CLASS and TEST_METHOD macros.

TEST_CLASS y TEST_METHOD forman parte del Marco de pruebas nativo de Microsoft. El Explorador de pruebas detecta métodos de prueba en otros marcos admitidos de forma similar.

Un método TEST_METHOD no devuelve ningún valor. Para obtener un resultado de prueba, use los métodos estáticos de la clase Assert para probar resultados reales con los resultados esperados. En el siguiente ejemplo, se da por hecho que MyClass tiene un constructor que toma una cadena std::string. En este ejemplo se muestra cómo puede probar que el constructor inicializa la clase de la manera esperada:

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

En el ejemplo anterior, el resultado de la llamada Assert::AreEqual determina si la prueba se supera o no. La clase Assert contiene otros muchos métodos para comparar los resultados previstos con los reales.

Puede agregar rasgos para probar métodos para especificar los propietarios de la prueba, la prioridad y otro tipo de información. Así, podrá usar esos valores para ordenar y agrupar las pruebas en el Explorador de pruebas. Para obtener más información, consulte Ejecutar pruebas unitarias con el Explorador de pruebas.

Ejecutar las pruebas

  1. En el menú Prueba, elija Windows>Explorador de pruebas. En la siguiente ilustración se muestra un proyecto de prueba cuyas pruebas aún no se han ejecutado.

    Test Explorer before running tests

    Nota:

    La integración de CTest con el Explorador de pruebas aún no está disponible. Realice pruebas de CTest desde el menú principal de CMake.

  2. Si alguna de las pruebas no aparecen en la ventana, compile el proyecto de prueba. Para ello, haga clic con el botón derecho en el nodo correspondiente del Explorador de soluciones y elija Compilar o Recompilar.

  3. En el Explorador de pruebas, elija Ejecutar todas o seleccione las pruebas concretas que quiera ejecutar. Haga clic con el botón derecho en una prueba para ver otras opciones, como la ejecución en modo de depuración con puntos de interrupción habilitados. Después de ejecutar todas las pruebas, la ventana muestra las pruebas que se han superado y las que no.

    Test Explorer after tests are run

En las pruebas no superadas, el mensaje muestra detalles que ayudan a diagnosticar la causa. Haga clic con el botón derecho en la prueba con errores para ver un menú emergente. Elija Depurar para ir paso a paso por la función donde se ha producido el error.

Para más información sobre cómo usar el Explorador de pruebas, consulte Ejecutar pruebas unitarias con el Explorador de pruebas.

Para obtener más información relativa a las pruebas unitarias, consulte Conceptos básicos de prueba unitaria.

Uso de CodeLens

Visual Studio 2017 y versiones posteriores (ediciones Professional y Enterprise)

CodeLens permite ver rápidamente el estado de una prueba unitaria sin salir del editor de código.

Inicialice CodeLens para un proyecto de prueba unitaria de C++ de cualquiera de las siguientes maneras:

  • Editar y compilar el proyecto de prueba o la solución.
  • Recompilar el proyecto o la solución.
  • Ejecutar pruebas desde la ventana Explorador de pruebas.

Después de que se inicialice, puede ver los iconos de estado de prueba encima de cada prueba unitaria.

C++ CodeLens Icons

Elija el icono para ver más información o para ejecutar o depurar la prueba unitaria:

C++ CodeLens Run and Debug