2010-12-27 39 views
7

Sto facendo un progetto in C++ nella mia Università e abbiamo bisogno di testare le nostre classi. I test sono piuttosto semplici: non abbiamo classi "problematiche" che trattano database, GUI, roba web, ecc. È solo un programma a riga di comando.Test unitari in C++

Che cos'è un buon framework di test unitario da utilizzare il più semplice possibile? Si prega di fornire un breve esempio di un test in tale quadro.

EDIT: Vedo che ci sono alcune risposte, quindi voglio aggiungere un'altra domanda: dove metto i metodi di prova? Sono dichiarati in un file diverso? Dove sarebbe quel file? Come eseguo tutti i test?

+0

Cunit http://cunit.sourceforge.net/documentation.html – DumbCoder

risposta

8

Boost. Mani giù.

#define BOOST_TEST_MODULE my_tests // use once per test program 
#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_CASE(case_x) 
{ 
    .... 
    BOOST_CHECK(... boolean expression ...); 
    BOOST_etc...etc... 
} 
+1

Potete per favore dare qualche dettaglio in più su dove mettere questo file, è vero '.cpp' o' .h', ecc ? –

+0

È .cpp - "junk superfluo per riempire i requisiti del commento" –

+0

come lo compilo? Con un diverso makefile? Cosa dovrebbe essere nel makefile? C'è qualcosa che ho bisogno di codice tranne i casi di test? È un eseguibile? Esegue il test sulla compilazione? –

5

Ce ne sono molti, abbastanza simili. La mia preferita è la libreria Boost.Test. Può essere complicato se necessario ma anche estremamente semplice per casi semplici. per esempio. il caso più semplice possibile assomiglia:

#include <boost/test/minimal.hpp> 

int add(int i, int j) { return i+j; } 

    int test_main(int, char *[])    // note the name! 
    { 
     // six ways to detect and report the same error: 
     BOOST_CHECK(add(2,2) == 4);  // #1 continues on error 
     BOOST_REQUIRE(add(2,2) == 4);  // #2 throws on error 
     if(add(2,2) != 4) 
      BOOST_ERROR("Ouch...");   // #3 continues on error 
     if(add(2,2) != 4) 
      BOOST_FAIL("Ouch...");    // #4 throws on error 
     if(add(2,2) != 4) throw "Oops..."; // #5 throws on error 

     return add(2, 2) == 4 ? 0 : 1;  // #6 returns error code 
    } 

Questo esempio utilizza il Minimal Testing Facility.

+0

Bene, mettere i test nel metodo principale è davvero una cattiva pratica., .. –

+4

Se non ci sono buoni motivi per fare altrimenti, dovresti collegare alla versione più recente di Boost, che è 1.45. –

+0

@ BjörnPollex: sai se esiste un collegamento indipendente dalla versione dei documenti Boost? Perché non ne ho trovato uno e vorrei evitare di aggiornare i collegamenti a tutte le risposte relative a Boost quando Boost rilascia una nuova versione. –

3

Google Test è eccellente. Mi piace la scrittura effettiva dei test un po 'meno di Boost (l'UTF di boost è ECCELLENTE), ma produce registri di console piuttosto con colori e simili sia su Windows che sulla maggior parte delle piattaforme POSIX.

+0

E c'è una comoda GUI chiamata "Guitar" (http://code.google.com/p/gtest-gbar/). – Nate

1

This offre una buona panoramica delle varie opzioni di test dell'unità quando si programma in C++.

+0

Il problema con questo articolo è che non è aggiornato. Ad esempio, il test di Google non viene nemmeno preso in considerazione e sono stati risolti numerosi reclami contro ciascuno dei rispettivi framework di test. –

1

IMHO, UnitTest+ + è quello che stai cercando:

unittest ++ è un framework di unit testing leggero per C++.

È stato progettato per lo sviluppo da prova su una vasta gamma di piattaforme . Semplicità, portabilità, velocità e ingombro ridotto sono tutti gli aspetti molto importanti di UnitTest ++ .

#include "stdafx.h" 
#include "UnitTest++.h" 

TEST(HelloUnitTestPP) 
{ 
    CHECK(false); 
} 

int main(int, char const *[]) 
{ 
    return UnitTest::RunAllTests(); 
}