Pregunta

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 unitarias integradas.

Se agradecería cualquier enlace o tutorial.

¿Fue útil?

Solución

Esta página puede ayudar, revisa bastantes marcos de pruebas unitarias de C++:

  • Unidad Cpp
  • Prueba de impulso
  • CppUnidadLite
  • Unidad NanoCpp
  • Unidad++
  • Prueba Cxx

Verificar 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 [p. ej.reflexión] para que sea fácil de usar).

CPPUnitLite intenta crear un verdadero marco de pruebas al estilo C++, no uno de Java adaptado a C++.(Estoy parafraseando el comentario de Feather Trabajar eficazmente con código heredado libro). CPPUnitLite2 Parece ser otra reescritura, con más funciones y correcciones de errores.

También me topé con Prueba unitaria++ que incluye cosas de CPPUnitLite2 y algún otro marco.

Microsoft ha lanzado Unidad Win.

también pagar Atrapar o Prueba de doctrina

Otros consejos

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++ mediante C++/CLI, podrá realizar llamadas a una DLL no administrada.Tendrá que cambiar la compatibilidad con 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):

  1. Asegúrese de que sus archivos de encabezado sean consumibles moviendo el código fuente a archivos cpp y utilizando la declaración directa si es necesario.
  2. Compile su código para probarlo 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. Utilice una clase realmente pequeña para declarar su prueba unitaria y salte del código administrado al código 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, todas las pruebas reales se realizarán 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, sencillo.

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

HT

Personalmente prefiero Unidad Win ya que no requiere que lo haga escribir cualquier cosa excepto mis pruebas (Construyo un .dll como prueba, no un exe).Simplemente construyo un proyecto, apunto WinUnit.exe a mi directorio de salida de prueba y ejecuta todo lo que encuentra.Puede descarga el proyecto WinUnit aquí.(MSDN ahora requiere que descargue el número completo, no el artículo.WinUnit está incluido dentro.)

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 casi cualquier código C++.

prueba.impulsoy prueba de googleParecen bastante similares, pero adaptados para usos ligeramente diferentes.Ambos tienen un componente binario, por lo que necesitarás un proyecto adicional en tu solución para compilar y ejecutar las pruebas.

El marco que utilizamos es Prueba Cxx, que es mucho más ligero;son solo encabezados y utiliza un script Perl (!) para extraer 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 obtengas Perl de una fuente o otro, lo que agrega gastos generales a la configuración de su entorno de compilación.

yo suelo Prueba unitaria++.

En los años transcurridos desde que hice esta publicación, la fuente se trasladó de SourceForge a github.También el tutorial de ejemplo Ahora es más agnóstico: no entra en ninguna configuración o proyecto en absoluto.

Dudo que siga funcionando para Visual Studio 6 ya que los archivos del proyecto ahora se crean a través de CMake.Si aún necesita soporte para la versión anterior, puede obtener la última versión disponible en FuenteForge rama.

Las herramientas que se han mencionado aquí son todas herramientas de línea de comandos.Si buscas una solución más integrada, echa un vistazo a estudio cfix, 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.

he usado Unidad Cpp con VS2005 y Eclipse.La wiki es muy completa (especialmente si estás familiarizado con JUnit).

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 para C++.

También usé CppUnit y estuvo bien.Muy parecido a NUnit/JUnit/etc.

Si has usado boost, ellos También tengo una biblioteca de pruebas unitarias.

Los chicos detrás de boost tienen algunos grave habilidades de codificación, 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 :-)

También me gusta CxxTest por las mismas razones.Es sólo un archivo de encabezado, por lo que no es necesario vincularlo.No estás atrapado con Perl ya que también hay un corredor de Python.Pronto revisaré la biblioteca de Google.Las cosas de Boost atraen demasiado equipaje.

Hasta donde yo sé, el probador unitario para Visual Studio 2008 es solo para código .NET.

Utilicé CppUnit en Visual Studio 2005 y me pareció bastante bueno.

Hasta donde recuerdo, la configuración fue relativamente sencilla.Solo asegúrese de que en sus proyectos de prueba el vinculador (Enlazador → Entrada → Dependencias adicionales) incluya cppunitd.lib.

Entonces, #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 tu clase de prueba funcione.

Estaba sufriendo al implementar pruebas unitarias para una aplicación C++ no administrada en un entorno Windows con Visual Studio.Así que logré superarlo y escribí una publicación como guía paso a paso para las pruebas unitarias de aplicaciones C++ no administradas.Espero que te pueda ayudar.

Prueba unitaria para C++ no administrado en Visual Studio

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top