Sto avendo difficoltà a capire come ottenere il framework di test impostato e utilizzabile in Visual Studio 2008 per C++
presumibilmente con la suite integrata Unit Testing.
Eventuali collegamenti o tutorial sarebbero apprezzati.
Sto avendo difficoltà a capire come ottenere il framework di test impostato e utilizzabile in Visual Studio 2008 per C++
presumibilmente con la suite integrata Unit Testing.
Eventuali collegamenti o tutorial sarebbero apprezzati.
Risposte:
Questa pagina può essere d'aiuto, esamina alcuni framework di unit test C ++:
Dai un'occhiata a CPPUnitLite o CPPUnitLite2 .
CPPUnitLite è stato creato da Michael Feathers, che originariamente portò JUnit di Java in C ++ come CPPUnit (CPPUnit cerca di imitare il modello di sviluppo di JUnit - ma C ++ non ha le funzionalità di Java [ad esempio la riflessione] per renderlo facile da usare).
CPPUnitLite tenta di creare un vero framework di test in stile C ++, non uno Java portato in C ++. (Sto parafrasando dal libro Working Effectively with Legacy Code di Feather ). CPPUnitLite2 sembra essere un'altra riscrittura, con più funzionalità e correzioni di bug.
Mi sono anche imbattuto in UnitTest ++ che include materiale da CPPUnitLite2 e qualche altro framework.
Microsoft ha rilasciato WinUnit .
Esiste un modo per testare C ++ non gestito utilizzando il framework di test integrato in Visual Studio 2008 . Se crei un progetto di test C ++, utilizzando C ++ / CLI, puoi quindi effettuare chiamate a una DLL non gestita. Dovrai cambiare il supporto di Common Language Runtime a / clr da / clr: safe se vuoi testare il codice scritto in C ++ non gestito.
Ho i dettagli passo passo sul mio blog qui: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Ecco l'approccio che utilizzo per testare il modulo IIS URL Rewrite in Microsoft (è basato sulla riga di comando, ma dovrebbe funzionare anche per VS):
Ecco un esempio:
// 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 questo approccio, le persone non devono imparare troppe cose in C ++ / CLI, tutto il vero test verrà eseguito in C ++ nativo e la classe TestShim verrà utilizzata per 'pubblicare' il test su MSTest.exe (o renderlo visibile ).
Per aggiungere nuovi test è sufficiente dichiarare un nuovo metodo [TestMethod] void NewTest () {:: NewTest ();} e una nuova funzione nativa void NewTest (). Niente macro, niente trucchi, subito.
Ora, il file heade è facoltativo, ma può essere utilizzato per esporre i metodi della classe Assert con firme native C ++ (ad esempio wchar_t * invece di Stirng ^), quindi puoi tenerlo vicino a C ++ e lontano da C ++ / CLI :
Ecco un esempio:
// 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, preferisco WinUnit poiché non mi richiede di scrivere nulla tranne che per i miei test ( creo un .dll come test, non un exe). Ho appena creato un progetto e punto WinUnit.exe alla mia directory di output di prova ed esegue tutto ciò che trova. Puoi scaricare il progetto WinUnit qui . (MSDN ora richiede di scaricare l'intero numero, non l'articolo. WinUnit è incluso.)
Il framework incluso in VS9 è .NET, ma puoi scrivere test in C ++ / CLI, quindi finché sei a tuo agio nell'apprendimento di alcuni ismi .NET, dovresti essere in grado di testare quasi tutti i codici C ++.
boost.test e googletest sembrano abbastanza simili, ma adattati per usi leggermente diversi. Entrambi hanno un componente binario, quindi avrai bisogno di un progetto extra nella tua soluzione per compilare ed eseguire i test.
Il framework che usiamo è CxxTest , che è molto più leggero; è solo intestazioni e utilizza uno script Perl (!) per estrarre le informazioni sulla suite di test dalle intestazioni (le suite ereditano da CxxTest :: Base, tutti i nomi dei metodi di test iniziano con "test"). Ovviamente, questo richiede di ottenere Perl da una fonte o da un'altra , il che aggiunge un sovraccarico alla configurazione dell'ambiente di compilazione.
Uso UnitTest ++ .
Negli anni trascorsi da quando ho scritto questo post, i sorgenti si sono spostati da SourceForge a github. Inoltre, il tutorial di esempio è ora più agnostico: non entra affatto in nessuna configurazione o impostazione del progetto.
Dubito che funzionerà ancora per Visual Studio 6 poiché i file di progetto vengono ora creati tramite CMake. Se hai ancora bisogno del supporto per la versione precedente, puoi ottenere l'ultima versione disponibile nel ramo SourceForge .
Gli strumenti che sono stati menzionati qui sono tutti strumenti da riga di comando. Se cerchi una soluzione più integrata, dai un'occhiata a cfix studio , che è un componente aggiuntivo di Visual Studio per unit test C / C ++. È abbastanza simile a TestDriven.Net, ma per C / C ++ (non gestito) piuttosto che .NET.
Non sono sicuro al 100% di VS2008, ma so che il framework di Unit Testing fornito da Microsoft in VS2005 come parte della loro Team Suite era solo per .NET, non C ++
Ho usato anche CppUnit ed è andato tutto bene. Più o meno come NUnit / JUnit / così via.
Se hai usato boost, hanno anche una libreria di unit test
I ragazzi dietro Boost hanno alcune serie abilità di codifica, quindi direi che il loro framework dovrebbe essere abbastanza buono, ma potrebbe non essere il più facile da usare :-)
Lo unit tester per Visual Studio 2008 è solo per il codice .NET per quanto ne so.
Ho usato CppUnit su Visual Studio 2005 e l'ho trovato abbastanza buono.
Per quanto ricordo, la configurazione era relativamente indolore. Assicurati solo che nei tuoi progetti di test il linker (Linker → Input → Additional Dependencies) includa cppunitd.lib.
Quindi, #include <cppunit/extensions/HelperMacros.h>
nella tua intestazione.
È quindi possibile seguire i passaggi in http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html per far funzionare la classe di prova.
Stavo soffrendo per l'implementazione di unit test per un'applicazione C ++ non gestita in un ambiente Windows con Visual Studio. Quindi sono riuscito a superare e ho scritto un post come guida passo passo al test unitario dell'applicazione C ++ non gestito. Spero che ti possa aiutare.