Pruebas en la pista de C++

Aprende a probar tus ejercicios de C++ en Exercism


Cada ejercicio incluye las pruebas unitarias y una receta de compilación de CMake. La implementación la aportas tú. Cada archivo de pruebas está pensado para enlazarse con tu implementación y así producir un ejecutable de consola que ejecuta las pruebas. Al ejecutar el ejecutable de pruebas se imprimen mensajes por cada prueba que falla y, cuando hay pruebas que fallan, se informa un estado de salida distinto de cero.

Nota: Tu código se prueba contra el conjunto de pruebas cada vez que compilas tu proyecto. Si tu código no pasa una o más pruebas pero es código C++ válido, de todos modos se compila.

Resolver cada ejercicio es un proceso que consiste en:

  • Crear la compilación inicial con CMake
  • Para cada prueba unitaria:
    • Resolver los errores de compilación para que la prueba falle.
    • Implementar lo justo y necesario para que la prueba pase.
    • Refactorizar tu implementación para mejorar la legibilidad, reducir la duplicación, etc.
    • Descomentar la siguiente prueba

Crear la compilación inicial con CMake

Cada ejercicio trae un archivo CMakeLists.txt junto con las pruebas unitarias. Contiene la receta de CMake ya preparada que se encarga de la compilación por ti. No deberías necesitar editar este archivo. La receta provista supone que tu implementación existe como un archivo de encabezado y un archivo fuente con el nombre del ejercicio.

Por ejemplo, el ejercicio bob espera una implementación en bob.h y bob.cpp. En los ejercicios con guiones en el nombre, se supone que los archivos fuente usan guiones bajos, así que word-count espera word_count.h y word_count.cpp. Puede que decidas que tu implementación es lo bastante simple como para vivir por completo en el encabezado, en cuyo caso puedes omitir el archivo cpp.

Crea tus archivos de implementación iniciales antes de ejecutar CMake. Si no tienes los archivos bob.h y bob.cpp al ejecutar CMake para el ejercicio bob, CMake generará un error porque no encuentra los archivos. Estos archivos pueden estar vacíos, pero deben existir.

Con esta receta, CMake puede generar un proyecto adecuado para tu entorno si ejecutas cmake -G con un generador adecuado y la ubicación del directorio del ejercicio. CMake generará un script de compilación apropiado para tu sistema operativo. Para mantener esos archivos generados separados del código fuente de tu ejercicio, es común crear un directorio llamado build que contenga tanto esos archivos de compilación generados como el código compilado. Así mantienes la carpeta del ejercicio ordenada y despejada.

Una vez que CMake ha creado el entorno de compilación, puedes compilar tu código con el comando adecuado para tu entorno:

  • Linux con make: make
  • Windows con Visual Studio: selecciona Build / Build Solution en el menú.
  • MacOS con Xcode: selecciona Build en la barra de herramientas
  • MacOS con «Unix Makefile»: make si usas la aplicación CLI de Exercism

A continuación se muestran ejemplos de cómo ejecutar CMake en distintos entornos.

Linux con make

El nombre del generador de CMake es Unix Makefiles. Suponiendo que el ejercicio actual es bob y que estamos en la carpeta del ejercicio:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

Este ejemplo muestra cómo crear archivos vacíos para la implementación antes de ejecutar CMake.

Simplemente escribe make en el directorio build para compilar las pruebas. Esto debería generar errores de compilación. Una vez corregidos los errores, make compilará y ejecutará las pruebas.

Windows con Visual Studio

Visual Studio tiene soporte nativo para proyectos de CMake, así que no deberías necesitar instalar CMake por separado ni ejecutarlo fuera de Visual Studio. Sigue esta guía para configurar el proyecto de CMake en Visual Studio.

MacOS con Xcode

El nombre del generador de CMake es Xcode. Suponiendo que el ejercicio actual es bob y que estamos en la carpeta del ejercicio:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Este ejemplo genera los archivos de Xcode para que puedas abrir el proyecto en Xcode. Con el proyecto abierto en Xcode, puede que necesites agregar otro target. Para un target nuevo, ve a File -> New -> Target en el menú, OS X \ Application \ Command Line Tool -> Next, elige C++ como lenguaje y dale un nombre al target. Ejecuta el código usando el target.

Si tu terminal muestra un error Xcode x.x not supported, es muy probable que Xcode no esté instalado en tu máquina o que tu versión esté desactualizada. Descarga e instala Xcode desde el App Store o desde este enlace. Los errores similares a The CXX compiler identification is unknown probablemente se resuelvan si sigues las instrucciones para instalar GCC o si agregas otro target en Xcode como se describe en el párrafo anterior.

MacOS con make cuando usas la CLI de Exercism

Este ejemplo está pensado específicamente para quienes quieren usar la aplicación CLI de Exercism para configurar, probar y enviar sus ejercicios de C++.

El nombre del generador de CMake es Unix Makefiles. Suponiendo que el ejercicio actual es bob y que estamos en la carpeta del ejercicio:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

En este ejemplo, sí creamos archivos vacíos para la implementación antes de ejecutar CMake, pero no creamos un directorio build vacío. Esto se debe a que la CLI de Exercism usa el archivo .exercism/metadata.json del directorio raíz para analizar los casos de prueba.

Simplemente escribe exercism test en el directorio raíz para compilar las pruebas. Esto debería generar errores de compilación. Una vez corregidos los errores, ejecutar exercism test de nuevo compilará y ejecutará las pruebas mediante la CLI de Exercism.