Aquí es el enfoque que utilizo para probar el módulo de IIS reescritura de URL de Microsoft (que está basado en línea de comandos, pero debe trabajar para VS también):
- Asegúrese de que sus archivos de cabecera son consumibles moviendo código fuente de los archivos cpp y utilizando la declaración de envío si es necesario.
- Compila tu código para probar como biblioteca (.lib)
- Crea tu proyecto UnitTest como C++ con soporte CLR.
- Incluya sus archivos de encabezado.
- Incluya sus archivos .lib.
- agregar una referencia a Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
- Usar una muy pequeña clase para declarar su prueba de unidad y saltar desde conseguido C++/código nativo como esto (puede tener errores tipográficos):
Aquí se muestra 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 C++/cosas CLI, toda la prueba real será hecho en C++ nativo y la clase TestShim será utilizado 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 puede usarse 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í se muestra 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
¿Qué marco acabaste usando? –
en realidad todavía no he usado ninguno de ellos. Decidí que lo que estaba trabajando en pruebas unitarias no era el uso más eficaz del tiempo. – DShook
Google lanza C++ Test Framework que es muy similar con xUnit frameworks. [http://code.google.com/p/googletest/](http://code.google.com/p/googletest/) – popopome