2013-11-23 5 views
5

Sto lavorando a un progetto C++ di grandi dimensioni che contiene più di 50 librerie ed eseguibili. Sto iniziando ad aggiungere test googletest per ciascuno di questi moduli. Ho letto che google consiglia di mettere i test in un eseguibile e non nelle librerie per semplificare la vita. Creare un eseguibile separato per ogni componente separato Avrei ottenuto più di 50 eseguibili di test e per poterli eseguire tutti contemporaneamente avrei bisogno di creare uno script esterno che avrebbe anche bisogno di combinare il loro output in uno solo. È la cosa consigliata da fare?Utilizzo di googletest per eseguire unit-test per più moduli testati contemporaneamente

Oppure devo creare una libreria per i test di ciascun modulo separato e collegare tutte queste librerie a un singolo test eseguibile? Ma poi eseguire test per un singolo modulo diventa meno conveniente. Avrei bisogno di compilare tutti i test e specificare l'eseguibile test principale attraverso il flag gtest_filter che i test dovrebbero essere eseguiti in questo momento.

Mi piacerebbe davvero sentire come gli altri fanno questo e qual è la migliore pratica qui.

Grazie

+0

È un po 'difficile dire quale dovrebbe essere la "migliore pratica" per il tuo caso, ma vorrei andare nella direzione per avere test runner separati per ciascuno dei tuoi moduli (libreria). Raccogliere gli output e combinarli in un singolo report sarebbe probabilmente più facile da fare quando si utilizza il formato JUnit-XML (e ad esempio XSLT). –

+0

Quale sistema di generazione stai usando? Penso che dovresti essere in grado di creare un singolo test eseguibile per tutte le 50 librerie, più 50 test runner per le librerie inividuali, se lo si desidera. Il mio suggerimento sarebbe di avere un singolo test eseguibile, ma questa è una preferenza personale. Quale sarebbe il tempo di esecuzione combinato di tutti i test? Mi piacerebbe avere un singolo eseguibile per rendere più facile l'esecuzione di test automatizzati. – NicholasM

+0

Grazie per i due commenti. Immagino che entrambi gli avvertimenti suggeriti qui potrebbero essere accettabili. Penso che a questo punto sceglierò di creare un eseguibile separato per ciascun componente testato e unirò eseguendoli tutti da un singolo script esterno che conterrà anche il loro output in un singolo file. – noplk1

risposta

1

[...] e al fine di eseguire tutti in una volta avrei bisogno di creare uno script esterna che avrebbe anche bisogno di combinare il loro output in un singolo .

Forse non è effettivamente necessario combinare l'output in un singolo file. Ad esempio con Jenkins puoi specificare un modello jolly per i file di output di Google Test.

Quindi, se si vuole realmente solo per vedere i risultati Google prova a Jenkins (o Hudson o qualsiasi strumento CI si utilizza), questa potrebbe essere una possibile soluzione:

Si potrebbe eseguire tutti i file eseguibili di test da un script semplice (o anche da una regola Crea), con il parametro --gtest_output=xml: seguito da un nome di directory (ad esempio che termina con una barra). Ogni test eseguibile scriverà quindi un proprio file XML in quella directory e sarà quindi possibile configurare lo strumento CI per leggere tutti i file da quella directory.

+0

Tutti i nostri progetti creano gtest eseguibili con nomi che iniziano con 'gtest' e abbiamo cmake configurato per mettere tutto eseguibili sotto la directory bin della nostra directory build, quindi sono stato in grado di tradurre questo in 'mkdir -p $ {WORKSPACE}/xml /; find build/bin -name "gtest *" -exec {} --gtest_output = xml: $ {WORKSPACE}/xml/{}. xml \; 'e quindi il carattere jolly ha funzionato bene quando ho usato' xml/build/bin/*.xml' (nota che find fornisce il nome completo con {}, quindi sono necessarie le directory aggiuntive). – sage