2011-10-27 21 views
57

Nel processo di creazione del nostro ++ framework di test unità C per i prossimi anni nella rosa dei candidati GoogleTest e CppUnit. Ho una certa esperienza con entrambi e la mia preferenza principale è GoogleTest. Comunque per convincere il mio capo ho bisogno di alcuni dati quindi ho fatto qualche lettura su Internet, inclusi i manuali, le pagine wiki e alcune delle fonti. Ho trovato un elenco dei vantaggi di GoogleTest e un vantaggio CppUnit (test runner grafici). Qui si sono ordinate per percepito utilità:GoogleTest vs CppUnit: I fatti

  • INSTANTIATE_TEST_CASE_P di creare un'istanza di un banco di prova con qualsiasi insieme di parametri che si desidera, compresi i prodotti cartesiani
  • FRIEND_TEST per testare i membri della classe private (per tutto il codice legacy)
  • svolta afferma in punti di interruzione
  • non fatali afferma
  • "out of the box" integrazione googlemock
  • automatico ic test di rivelazione, non c'è bisogno di enumerare loro
  • test possono essere disattivati ​​e attivati ​​
  • test da eseguire possono essere selezionati tramite modelli di nomi
  • valore/prove di parametri
  • predicato definito dall'utente afferma
  • la morte mette alla prova
  • molto più ricca serie di asserisce
  • tipo afferma
  • affermando sul subroutine
  • ulteriore informazioni di debug può essere aggiunto a asserisce utilizzando < <
  • RecordProperty emette ultimo valore della proprietà per l'output XML
  • SCOPED_TRACE aiuta a comprendere il contesto di un errore di asserzione proveniente dall'interno di un sub-routine o loop.
  • xUnit output XML, può essere mostrato da Jenkins subito senza una trasformazione XSLT tra
  • supporta stampanti tipi personalizzati
  • tempo consumato dalla indicazione di prova (ho il sospetto questo è possibile anche con CppUnit ma mi rifugio figured it out ancora)
  • prova evento ascoltatore API (plug-in definiti dall'utente)
  • prova mischiare
  • senza eccezioni e RTTI

A m Ho ragione nel ritenere che tutto quanto sopra non sia supportato da CppUnit? Esiste una funzione GoogleTest utile non disponibile in CppUnit che mi manca?

E, ultimo ma non meno importante: ci sono alcune caratteristiche CppUnit che GoogleTest manca?

Grazie!

+5

Alcune delle risposte a [Confronto di C++ framework di unit test] (http://stackoverflow.com/questions/242926/comparison-of-c-unit-test-frameworks) affrontano specificamente le caratteristiche GoogleTest. –

+2

Un paio di anni fa stavo facendo un sondaggio simile, GoogleTest non era nei paraggi. Ho optato per CXXTest che disponeva di un meccanismo per enumerare i casi di test mediante un passo di pre-analisi con Perl. Questo è stato di gran lunga superiore a CppTest. Detto questo, non so nulla su GoogleTest. –

+1

Un corridore di test grafico è un vantaggio? Di solito vuoi qualcosa che può essere automatizzato facilmente, perché l'automazione ti consente di ottenere feedback di prova più facilmente e più spesso. –

risposta

7

Se si utilizza la versione precedente del compilatore gcc o se il codice sotto test viene eseguito su vxWorks (o VxSim), si potrebbe avere una migliore possibilità con cppUnit rispetto al framework Googletest.

D'altra parte, un'altra caratteristica del quadro googletest è disponibilità di 3 differenti livelli di impostazione/smontaggio:

  • per programma
  • al banco di prova (o gruppo di prova)
  • per individuo istanze di test

Non sono sicuro se questo è supportato in cppUnit, ma questo potrebbe risultare molto utile, specialmente con i sistemi legacy.

Inoltre, esiste un plugin googletest per Eclipse CDT.

3

Se non si è guardato allo xUnit++, l'ho fatto specificatamente perché non ero soddisfatto di ciò che era disponibile (incluso gtest). La maggior parte della tua lista è supportata, e in caso contrario, se si tratta di una funzionalità "must have", sarei probabilmente disposto ad aggiungerla.

+0

Puoi rilasciarlo con una licenza open source permissiva? Come la licenza Apache 2.0 o MIT? –

+0

Sinceramente non ricordo quale licenza viene utilizzata, ma penso che sia la licenza del MIT. – moswald

+0

Grazie mille, ma sebbene il testo sia lo stesso, License.txt non dice che è la licenza MIT. Ti dispiacerebbe aggiungere (quando hai tempo, ovviamente), se va bene? Ti piace questo http://opensource.org/licenses/MIT? Penso che permetterebbe a più persone di usare e provare questo meraviglioso framework :-) –

Problemi correlati