Domanda

Ho difficoltà a capire come impostare e utilizzare il framework di test in Visual Studio 2008 per C++, presumibilmente con la suite di unit testing integrata.

Eventuali collegamenti o tutorial sarebbero apprezzati.

È stato utile?

Soluzione

Questa pagina può aiutare, esamina alcuni framework di unit test C++:

  • Unità Cpp
  • Prova.Boost
  • CppUnitLite
  • Unità NanoCpp
  • Unità++
  • CxxTest

Guardare CPUnitLite O CPUnitLite2.

CPUnitLite è stato creato da Michael Feathers, che originariamente ha portato JUnit di Java su C++ come CPUnit (CPPUnit cerca di imitare il modello di sviluppo di JUnit - ma C++ non ha le funzionalità di Java [ad es.riflessione] per renderlo facile da usare).

CPPUnitLite tenta di creare un vero framework di test in stile C++, non uno Java portato su C++.(Sto parafrasando quello di Feather Lavorare in modo efficace con il codice legacy libro). CPUnitLite2 sembra essere un'altra riscrittura, con più funzionalità e correzioni di bug.

Anch'io mi sono appena imbattuto ProvaUnità++ che include materiale da CPPUnitLite2 e qualche altro framework.

Microsoft ha rilasciato WinUnit.

Anche cassa Presa O Doctest

Altri suggerimenti

Esiste un modo per testare il 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.Sarà necessario passare il supporto Common Language Runtime a /clr da /clr:safe se si vuole 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 di Microsoft (è basato sulla riga di comando, ma dovrebbe funzionare anche per VS):

  1. Assicurati che i file di intestazione siano utilizzabili spostando il codice sorgente nei file cpp e utilizzando la dichiarazione anticipata, se necessario.
  2. Compila il tuo codice da testare come libreria (.lib)
  3. Crea il tuo progetto UnitTest come C++ con supporto CLR.
  4. Includi i tuoi file di intestazione.
  5. Includi i tuoi file .lib.
  6. Aggiungere un riferimento a Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
  7. Utilizza una classe davvero piccola per dichiarare il tuo unit test e passa dal codice gestito al codice C++/nativo come questo (potrebbe contenere errori di battitura):

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 troppo cose C++/CLI, tutti i test reali verranno eseguiti 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().Nessuna macro, nessun trucco, semplice.

Ora, il file heade è facoltativo, ma può essere utilizzato per esporre i metodi della classe Assert con firme native C++ (ad es.wchar_t* invece di Stirng^), quindi puoi mantenerlo 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 dal momento che non me lo impone scrivere qualsiasi cosa tranne i miei test (Costruisco un .dll come test, non un exe).Creo semplicemente un progetto e indico WinUnit.exe nella directory di output del test ed esegue tutto ciò che trova.Puoi scarica qui il progetto WinUnit.(MSDN ora richiede di scaricare l'intero numero, non l'articolo.WinUnit è incluso all'interno.)

Il framework incluso con VS9 È .NET, ma puoi scrivere test in C++/CLI, quindi finché ti senti a tuo agio nell'imparare alcuni ismi .NET, dovresti essere in grado di testare la maggior parte del codice C++.

boost.testE googletestsembrano abbastanza simili, ma adattati per usi leggermente diversi.Entrambi hanno un componente binario, quindi avrai bisogno di un progetto aggiuntivo nella tua soluzione per compilare ed eseguire i test.

Il framework che utilizziamo è CxxTest, che è molto più leggero;sono solo intestazioni e utilizza uno script Perl (!) per ricavare 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 che tu ottenga Perl da una fonte O un altro, che aggiunge un sovraccarico alla configurazione dell'ambiente di compilazione.

Io uso ProvaUnità++.

Negli anni successivi alla pubblicazione di questo post, la fonte si è spostata da SourceForge a github.Anche il tutorial di esempio ora è più agnostico: non entra in alcuna configurazione o impostazione di 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 della versione precedente, puoi ottenere l'ultima versione disponibile sotto il file SourceForge ramo.

Gli strumenti menzionati qui sono tutti strumenti da riga di comando.Se cerchi una soluzione più integrata, dai un'occhiata a studio cfix, che è un componente aggiuntivo di Visual Studio per unit test C/C++.È abbastanza simile a TestDriven.Net, ma per C/C++ (non gestito) anziché .NET.

ho usato Unità Cpp con VS2005 ed Eclipse.Il wiki è molto approfondito (soprattutto se hai familiarità con JUnit).

Non sono sicuro al 100% di VS2008, ma so che il framework 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 lo stesso di NUnit/JUnit/così via.

Se hai usato boost, loro hanno anche una libreria di test unitari

I ragazzi dietro Boost ne hanno alcuni serio braciole di codifica, quindi direi che il loro framework dovrebbe essere abbastanza buono, ma potrebbe non essere il più facile da usare :-)

Mi piace anche il CxxTest per gli stessi motivi.È solo un file di intestazione, quindi non è richiesto alcun collegamento.Non sei bloccato con Perl poiché esiste anche un corridore Python.Presto esaminerò la libreria di Google.La roba Boost porta con sé troppi altri bagagli.

Per quanto ne so, lo unit tester per Visual Studio 2008 è solo per il codice .NET.

Ho utilizzato CppUnit su Visual Studio 2005 e l'ho trovato piuttosto buono.

Per quanto ricordo, l'installazione è stata relativamente indolore.Assicurati solo che nei tuoi progetti di test il linker (Linker → Input → Dipendenze aggiuntive) includa cppunitd.lib.

Poi, #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 tua lezione di prova.

Stavo soffrendo per implementare test unitari 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 allo unit test delle applicazioni C++ non gestite.Spero che possa aiutarti.

Unit test per C++ non gestito in Visual Studio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top