2009-09-17 9 views
7

Qualcuno ha utilizzato un pacchetto come CppUnit per eseguire cross-compilazione dei test di unità C++ per l'esecuzione su una piattaforma incorporata?Test di compilazione incrociata con CppUnit o simile

Sto usando G ++ su una macchina Linux per compilare eseguibili che devono essere eseguiti su una scheda LynxOS. Non riesco a ottenere nessuno dei comuni pacchetti di test unitari per configurare e creare qualcosa che creerà test unitari.

Vedo molti pacchetti di unit test, CppUnit, UnitTest ++, GTest, CppUTest, ecc., Ma molto poco sull'utilizzo di questi pacchetti in uno scenario cross-compiler. Quelli con uno script "configure" implicano che questo è possibile, ma non riesco a farli configurare e costruire.

+0

Im utilizzando CppUnit su Windows e Linux in un progetto cross-compile. Nessun problema. Quali sono i tuoi problemi esatti? – tauran

risposta

2

Si potrebbe voler guardare CxxTest. Non l'ho usato per la compilazione incrociata, ma è basato interamente su intestazioni e uno script Python - nessuna libreria compilata. Potrebbe essere più facile adattarsi di altri.

2

La mia pratica quando il codice di test unitario che viene compilato in modo incrociato è quello di compilare i test unitari stessi utilizzando la toolchain nativa, di solito un po 'il sapore del compilatore x86. Questi test unitari vengono eseguiti sulla macchina di compilazione anziché sul target incorporato. Se stai scrivendo rigorosi test unitari (al contrario dei test di integrazione) con stub e mock non dovresti avere dipendenze sull'hardware incorporato. Altrimenti ... non è mai troppo tardi per iniziare.

Un ulteriore vantaggio di questo approccio è che per i target non x86 incorporati, questo tipo di test dell'unità aiuta a eliminare i problemi di endianness, le variabili non inizializzate e altri bug interessanti.

0

Im non fornire una risposta qui, ma non vorrei prendere il consiglio di NON eseguire i test di unità su obiettivi diversi: è ancora necessario, preferibilmente entrambi i test di sistema e unità.

Altrimenti cose semplici come errori di allineamento su ARM/altre CPU incorporate non verranno scoperte.

0

Sembra che sia necessario disporre di una libreria di test dell'unità compilata per il proprio sistema operativo e architettura, oltre a ciò che si trova sui computer di sviluppo/di sviluppo. Preferisco il framework di test unitario Boost ++ per questo. Puoi scaricare qualcosa che è pre-installato per la tua architettura, ma di solito dovrai compilarlo da solo. Ho trovato alcune soluzioni googling su come effettuare il cross-compile boost (ad esempio http://goodliffe.blogspot.com/2008/05/cross-compiling-boost.html). CppUnit potrebbe essere più facile da compilare, non aver provato. Il principio generale è lo stesso, si compila la stessa versione di libreria per l'architettura di sviluppo e per la macchina di destinazione

La mia configurazione per nuovi obiettivi è compilare le librerie Boost ++ necessarie per il mio sistema operativo/arco di destinazione e quindi scrivere test per collegare contro entrambe le librerie Boost ++ e il codice da testare.

Il vantaggio è che è possibile eseguire il collegamento alle librerie Boost ++ x86 Linux o alle librerie Boost ++ di destinazione, quindi è possibile eseguire i test sia sul computer di destinazione che su quello di sviluppo.

La mia configurazione generale simile a questa:

libs/boost/<arch>/<boost libs> 
src/foo.{cpp,h} 
tests/test_foo.cpp 
build/foo 
build/test_foo.<arch> 

ho messo compilato librerie Boost ++ sotto diverse architetture che ho bisogno in libs/dir per tutti i miei progetti e di riferimento quelle librerie nel mio Makefiles. L'origine ei test vengono generati con una variabile di arco specificata per eseguire il comando in questo modo, posso eseguire test_foo.x86 sulla mia macchina di sviluppo e test_foo. {Arm, mips, ppc, ecc.} Sui miei obiettivi.

3
./configure --prefix=/sandBox --build=`config.guess` --host=sh4-linux 

sh4-linux è la piattaforma in cui si desidera eseguire il programma.

0

Per cross-compilare CppUTest (v3.3), ho dovuto eseguire l'override di LD, CXX e CC rendono variabili.

Per ottenere sia la CppUTest e CppUTestExt (per CppUMock) biblioteche e le loro prove costruite ho usato i seguenti comandi dalla directory CPPUTEST_HOME:

Per costruire libCppUTest.a:

make all LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

Per costruire libCppUTestExt .a (per CppUMock):

make extensions LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

È quindi possibile copiare i CppUTest_tests e CppUTestExt_tests eseguibili che vengono prodotti nella tua CPPUTEST_HOME sul dispositivo di destinazione ed eseguirli lì.

Supponendo che CppUTest passi i propri test sul tuo obiettivo, sei pronto a sviluppare i tuoi test con CppUTest. Basta collegare il codice di prova con le librerie CppUTest incrociate e copiare l'eseguibile risultante sulla destinazione. Quindi eseguire per ottenere i risultati dei test unitari dalla piattaforma di destinazione stessa.

Problemi correlati