Cómo configurar pruebas de unidad para Visual Studio C ++

votos
87

Tengo problemas para descubrir cómo configurar el marco de prueba configurado y utilizable en Visual Studio 2008 para C ++, presumiblemente con el conjunto de pruebas de unidad incorporado.

Cualquier enlace o tutorial sería apreciado.

Publicado el 06/08/2008 a las 08:57
fuente por usuario
En otros idiomas...                            


12 respuestas

votos
55

Esta página puede ayudar, revisa bastantes marcos de prueba de unidades C ++:

  • CppUnit
  • Boost.Test
  • CppUnitLite
  • NanoCppUnit
  • Unidad ++
  • CxxTest

Verifique CPPUnitLite o CPPUnitLite2 .

CPPUnitLite fue creado por Michael Feathers, que 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 de C ++, no uno de Java portado a C ++. (Estoy parafraseando de Feather's Working Effectively with Legacy Code book). CPPUnitLite2 parece ser otra reescritura, con más características y correcciones de errores.

También me encontré con UnitTest ++ que incluye material de CPPUnitLite2 y algunos otros frameworks.

Microsoft ha lanzado WinUnit .

También checkout Catch o Doctest

Respondida el 30/08/2008 a las 14:51
fuente por usuario

votos
24

Hay una forma de probar C ++ no administrado utilizando el marco de prueba incorporado dentro de Visual Studio 2008 . Si crea un Proyecto de prueba 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/

Respondida el 05/05/2009 a las 14:54
fuente por usuario

votos
9

Este es el enfoque que utilizo para probar el módulo de reescritura de URL de IIS en Microsoft (está basado en línea de comandos, pero también debería funcionar para VS):

  1. Asegúrese de que los archivos de encabezado sean consumibles moviendo el código fuente a los archivos cpp y usando la declaración de reenvío si es necesario.
  2. Compila tu código para probar como biblioteca (.lib)
  3. Cree su proyecto UnitTest como C ++ con soporte CLR.
  4. Incluya sus archivos de encabezado.
  5. Incluya sus archivos .lib.
  6. Agregue una referencia a Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Usa una clase muy pequeña para declarar tu unidad de prueba y saltar de código administrado a C ++ / Native 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, la gente no tiene que aprender demasiado 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, solo declara un nuevo método [TestMethod] void NewTest () {:: NewTest ();} y una nueva función nativa NewTest () vacía. Sin macros, sin trucos, directo.

Ahora, el archivo heade es opcional, pero se puede usar para exponer los métodos de la clase Assert con firmas C ++ nativas (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

Respondida el 01/12/2009 a las 22:56
fuente por usuario

votos
6

Personalmente, prefiero WinUnit ya que no requiere que escriba nada excepto mis pruebas (construyo un .dll como prueba, no como un exe). Solo construyo 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 en.)

Respondida el 15/09/2008 a las 17:33
fuente por usuario

votos
4

El marco incluido con VS9 es .NET, pero puede escribir pruebas en C ++ / CLI, por lo que, mientras se sienta cómodo aprendiendo algunos ismos .NET, debería poder probar la mayoría de los códigos C ++.

boost.test y googletest parecen 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 liviano; son solo encabezados, y usa una secuencia de comandos Perl (!) para raspar la información de la suite de prueba de sus encabezados (las suites 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 otra , lo que agrega una sobrecarga a la configuración de su entorno de compilación.

Respondida el 14/08/2008 a las 15:17
fuente por usuario

votos
2

Las herramientas que se han mencionado aquí son todas las 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 de unidad de C / C ++. Es bastante similar a TestDriven.Net, pero para C / C ++ (no administrado) en lugar de .NET.

Respondida el 24/06/2009 a las 07:21
fuente por usuario

votos
2

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 ejemplo de tutorial ahora es más agnóstico: no entra en ninguna configuración o configuración del 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 de soporte, puede obtener la última versión disponible en la rama de SourceForge .

Respondida el 06/08/2008 a las 09:28
fuente por usuario

votos
1

Sufría de implementar la unidad de pruebas para una aplicación C ++ no administrado en un entorno Windows con Visual Studio. Así logré superar y escribí un post como una guía paso a paso para no administrado C ++ pruebas de unidad de aplicación. Espero que le puede ayudar.

Unidad de prueba de C ++ no administrado en Visual Studio

Respondida el 07/12/2012 a las 09:32
fuente por usuario

votos
1

Me gusta el CxxTest también por las mismas razones. Es solo un archivo de encabezado, por lo que no es necesario un enlace. No estás atascado con Perl, ya que también hay un corredor de Python. Voy a revisar la biblioteca de Google pronto. Las cosas de Boost atraen demasiados equipajes.

Respondida el 27/08/2008 a las 19:15
fuente por usuario

votos
1

El probador de unidades para Visual Studio 2008 es solo para el código .NET, hasta donde yo sé.

Usé CppUnit en Visual Studio 2005 y lo encontré bastante bueno.

Por lo que recuerdo, la configuración fue relativamente indolora. Solo asegúrese de que en sus proyectos de prueba, el enlazador (Enlazador → Entrada → Dependencias Adicionales) incluya cppunitd.lib.

Luego, #include <cppunit/extensions/HelperMacros.h>en tu encabezado.

A continuación, puede seguir los pasos de http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html para que la clase de prueba funcione.

Respondida el 19/08/2008 a las 18:01
fuente por usuario

votos
1

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 fue solo para .NET, no para C ++.

También he usado CppUnit y estaba bien. Casi lo mismo que NUnit / JUnit / etc.

Si usó boost, también tienen una biblioteca de prueba de unidad

Los chicos detrás de boost tienen algunas chuletas de codificación serias , así que diría que su framework debería ser bastante bueno, pero puede que no sea el más fácil de usar :-)

Respondida el 12/08/2008 a las 00:45
fuente por usuario

votos
1

He usado CppUnit con VS2005 y Eclipse. La wiki es muy minuciosa (especialmente si estás familiarizado con JUnit).

Respondida el 12/08/2008 a las 00:13
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more