Tengo problemas para averiguar cómo configurar y usar el marco de prueba en Visual Studio 2008 para C++
, presumiblemente, con la suite integrada en la unidad de prueba.
Se agradecería cualquier enlace o tutorial.
Tengo problemas para averiguar cómo configurar y usar el marco de prueba en Visual Studio 2008 para C++
, presumiblemente, con la suite integrada en la unidad de prueba.
Se agradecería cualquier enlace o tutorial.
Respuestas:
Esta página puede ayudar, revisa bastantes marcos de pruebas unitarias de C ++:
Consulte 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, la reflexión] para facilitar su uso).
CPPUnitLite intenta hacer un verdadero marco de prueba al estilo C ++, no uno de Java adaptado a C ++. (Estoy parafraseando del libro Working Effectively with Legacy Code de Feather ). CPPUnitLite2 parece ser otra reescritura, con más funciones y correcciones de errores.
También me encontré con UnitTest ++ que incluye cosas de CPPUnitLite2 y algún otro marco.
Microsoft ha lanzado WinUnit .
Existe una forma 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 escrito 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/
Este es el enfoque que utilizo 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):
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 declare un nuevo método [TestMethod] void NewTest () {:: NewTest ();} y una nueva función nativa void NewTest (). Sin macros, sin trucos, sencillo.
Ahora, el archivo de cabecera 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
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, 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 número completo, no el artículo. WinUnit está incluido).
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 ismos de .NET, debería poder probar la mayoría de los códigos de C ++.
boost.test y 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 usamos es CxxTest , que es mucho más ligero; son solo encabezados, y utiliza un script Perl (!) para extraer información de la suite de pruebas de sus encabezados (las suites heredan de CxxTest :: Base, todos los nombres de sus métodos de prueba comienzan con "test"). Obviamente, esto requiere que obtenga Perl de una fuente u otra , lo que agrega sobrecarga a la configuración de su entorno de compilación.
Yo uso UnitTest ++ .
En los años transcurridos desde que hice esta publicación, la fuente se ha movido 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 en absoluto.
Dudo que aún funcione para Visual Studio 6 ya que los archivos del proyecto ahora se crean a través de CMake. Si aún necesita el soporte de la versión anterior, puede obtener la última versión disponible en la rama de SourceForge .
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 de 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 unitarias que Microsoft envió en VS2005 como parte de su Team Suite era solo para .NET, no C ++
También usé CppUnit y estuvo bien. Muy parecido a NUnit / JUnit / etc.
Si ha usado boost, también tienen una biblioteca de pruebas unitarias
Los chicos detrás de boost tienen algunas habilidades de codificación serias , por lo que diría que su marco debería ser bastante bueno, pero puede que no sea el más fácil de usar :-)
El probador de unidades para Visual Studio 2008 es solo para código .NET que yo sepa.
Usé CppUnit en Visual Studio 2005 y me pareció bastante bueno.
Por lo que recuerdo, la configuración fue relativamente indolora. Solo asegúrese de que en sus proyectos de prueba el vinculador (Vinculador → Entrada → Dependencias adicionales) incluya cppunitd.lib.
Luego, #include <cppunit/extensions/HelperMacros.h>
en tu 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 para implementar pruebas unitarias para una aplicación C ++ no administrada en un entorno Windows con Visual Studio. Así que logré 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 ayude.