google unit test framework for c++
Cómo configurar pruebas unitarias para Visual Studio C++ (12)
El marco incluido con VS9 es .NET, pero puede escribir pruebas en C ++ / CLI, por lo que siempre que se sienta cómodo aprendiendo algunos isms .NET, debería poder probar la mayoría de los códigos de C ++.
boost.test y http://code.google.com/p/googletest/ parecen ser bastante similares, pero adaptados para usos ligeramente diferentes. Ambos tienen un componente binario, por lo que necesitará un proyecto adicional en su solución para compilar y ejecutar las pruebas.
El marco que utilizamos es CxxTest , que es mucho más ligero; son solo encabezados y utiliza un script Perl (!) para raspar la información del conjunto de pruebas de sus encabezados (los conjuntos heredan de CxxTest :: Base, todos los nombres de sus métodos de prueba comienzan con "prueba"). Obviamente, esto requiere que obtenga Perl de una fuente u another , lo que agrega una sobrecarga a la configuración de su entorno de compilación.
Tengo problemas para descubrir cómo configurar y utilizar el marco de prueba en Visual Studio 2008 para C ++, presumiblemente con el conjunto de pruebas de unidad incorporado.
Cualquier enlace o tutoriales sería apreciado.
El probador de unidades para Visual Studio 2008 es solo para código .NET hasta donde yo sé.
Usé CppUnit en Visual Studio 2005 y me pareció bastante bueno.
Hasta donde recuerdo, la configuración fue relativamente indolora. Solo asegúrese de que en sus proyectos de prueba el enlazador (Linker → Input → Dependencias adicionales) incluya cppunitd.lib.
Luego, #include <cppunit/extensions/HelperMacros.h>
en su encabezado.
Luego puede seguir los pasos en http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html para que su clase de prueba funcione.
Estaba sufriendo la implementación de pruebas unitarias para una aplicación C ++ no administrada en un entorno Windows con Visual Studio. Así que me las arreglé para superar y escribí una publicación como una guía paso a paso para las pruebas unitarias de aplicaciones C ++ no administradas. Espero que te pueda ayudar.
Este es el enfoque que uso para probar el módulo de reescritura de URL de IIS en Microsoft (está basado en la línea de comandos, pero también debería funcionar para VS):
- Asegúrese de que sus archivos de encabezado sean consumibles moviendo el código fuente a los archivos cpp y utilizando la declaración directa si es necesario.
- Compile su código para probarlo como biblioteca (.lib)
- Cree su proyecto UnitTest como C ++ con soporte CLR.
- Incluya sus archivos de encabezado.
- Incluya sus archivos .lib.
- Agregue una referencia a Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
- Use una clase realmente pequeña para declarar su prueba de unidad y salte de código administrado a C ++ / nativo como este (puede tener errores tipográficos):
Aquí hay un ejemplo:
// Example
#include "stdafx.h"
#include "mstest.h"
// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
// Arrange
Adder yourNativeObject;
int expected = 3;
int actual;
// Act
actual = yourNativeObject.Add(1, 2);
// Assert
Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}
// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
[TestMethod]
void AddTwoNumbersTest() {
// Just jump to C++ native code (above)
::AddTwoNumbersTest();
}
};
Con este enfoque, las personas no tienen que aprender demasiado sobre C ++ / CLI, toda la prueba real se realizará en C ++ nativo y la clase TestShim se usará para ''publicar'' la prueba en MSTest.exe (o hacerla visible )
Para agregar nuevas pruebas, simplemente declara un nuevo método [TestMethod] void NewTest () {:: NewTest ();} y una nueva función nativa void NewTest (). Sin macros, sin trucos, directo.
Ahora, el archivo de encabezado es opcional, pero se puede usar para exponer los métodos de la clase Assert con firmas nativas de C ++ (por ejemplo, wchar_t * en lugar de Stirng ^), por lo que puede mantenerlo cerca de C ++ y lejos de C ++ / CLI :
Aquí hay un ejemplo:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
He usado CppUnit con VS2005 y Eclipse. El wiki es muy completo (especialmente si está familiarizado con JUnit).
Las herramientas que se han mencionado aquí son todas herramientas de línea de comandos. Si busca una solución más integrada, eche un vistazo a cfix studio , que es un complemento de Visual Studio para pruebas unitarias C / C ++. Es bastante similar a TestDriven.Net, pero para C / C ++ (no administrado) en lugar de .NET.
No estoy 100% seguro acerca de VS2008, pero sé que el marco de pruebas de unidad que Microsoft incluyó en VS2005 como parte de su Team Suite fue solo para .NET, no para C ++
También he usado CppUnit y estuvo bien. Al igual que NUnit / JUnit / etc.
Si usaste boost, también tienen una biblioteca de pruebas unitarias
Los chicos detrás de boost tienen algunas chuletas de codificación serias , por lo que diría que su marco debería ser bastante bueno, pero podría no ser el más fácil de usar :-)
Personalmente, prefiero WinUnit ya que no requiere que escriba nada excepto mis pruebas (construyo un .dll como prueba, no un exe). Acabo de construir un proyecto y apunto WinUnit.exe a mi directorio de salida de prueba y ejecuta todo lo que encuentra. Puede descargar el proyecto WinUnit aquí . (MSDN ahora requiere que descargue el problema completo, no el artículo. WinUnit está incluido dentro).
También me gusta el CxxTest por las mismas razones. Es un archivo de encabezado solo, por lo que no se requiere vinculación. No estás atrapado con Perl, ya que también hay un corredor de Python. Estaré revisando la biblioteca de Google pronto. Las cosas de Boost arrastran demasiado equipaje.
Yo uso UnitTest++ .
En los años transcurridos desde que hice esta publicación, la fuente se mudó de SourceForge a github. Además, el tutorial de ejemplo ahora es más agnóstico: no entra en ninguna configuración o configuración de proyecto.
Dudo que todavía funcione para Visual Studio 6 ya que los archivos del proyecto ahora se crean a través de CMake. Si aún necesita la versión anterior, puede obtener la última versión disponible en la rama de SourceForge .
Esta página puede ayudar, revisa bastantes marcos de prueba de unidad C ++:
- CppUnit
- Boost.Test
- CppUnitLite
- NanoCppUnit
- Unidad ++
- CxxTest
Echa un vistazo a CPPUnitLite o CPPUnitLite2 .
CPPUnitLite fue creado por Michael Feathers, quien originalmente portó JUnit de Java a C ++ como CPPUnit (CPPUnit intenta imitar el modelo de desarrollo de JUnit, pero C ++ carece de las características de Java [por ejemplo, reflexión] para que sea fácil de usar).
CPPUnitLite intenta crear un verdadero marco de prueba de estilo C ++, no uno Java portado a C ++. (Estoy parafraseando del libro Feather''s Working Effectively with Legacy Code ). CPPUnitLite2 parece ser otra reescritura, con más funciones y correcciones de errores.
También me topé con UnitTest++ que incluye cosas de CPPUnitLite2 y algún otro marco.
Microsoft ha lanzado WinUnit .
Hay una manera de probar C ++ no administrado utilizando el marco de prueba integrado en Visual Studio 2008 . Si crea un proyecto de prueba de C ++, utilizando C ++ / CLI, puede realizar llamadas a una DLL no administrada. Tendrá que cambiar el soporte de Common Language Runtime a / clr desde / clr: safe si desea probar el código que se escribió en C ++ no administrado.
Tengo detalles paso a paso en mi blog aquí: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/