2013-08-08 19 views
15

Come si eseguono i test unitari sul codice nativo di Android (nativo C/C++, non Java)? Finora ho trovato solo una domanda simile a one, e la risposta dice usare junit con JNI, che non voglio fare (aggiungere le chiamate JNI sembra inutilmente complicato per il test delle unità, e non è in realtà un test unitario del codice nativo Comunque).Test dell'unità su Android NDK

Does CppUnit (anche suggerito lì) funziona davvero su Android? Si noti che voglio eseguire i test in modo nativo sul dispositivo, non sull'ambiente di sviluppo dell'host. This sembra un porto Android, vale la pena guardare?

Un framework di test Google ufficiale come googletest sarebbe l'ideale, ma non sembra funzionare con NDK.

risposta

11

Io uso googletest attraverso NDK utilizzare un $ (import-modulo di chiamata a portare nel .so principale e poi avere un unico file nel file eseguibile che assomiglia

int main(int argc, char *argv[]) 
{ 
#if RUN_GTEST 
    INIT_GTESTS(&argc,(char**)argv); 
    RUN_ALL_GTESTS(); 
#endif 
} 

E poi ho costruire che con BUILD_EXECUTABLE, distribuirlo come:

find libs/ -type f -print -exec adb push {} /data/local/tmp \; 

ed eseguirlo come

adb shell LD_LIBRARY_PATH=/data/local/tmp:/vendor/lib:/system/lib /data/local/tmp/gtest 

Così doesn' t testare il ciclo di vita dell'applicazione ma verifica tutti i test unitari.

Se avessi bisogno di testare qualcosa con un'interfaccia utente, potrei fare qualcosa di simile, ma rendere ciò che ora è "principale" una funzione nativa e invocarla quando l'attività viene caricata.

+0

Grazie! Lo controlleremo. Non avevo capito che anche tu potessi creare eseguibili. – Indivara

+0

Inoltre è possibile creare e collegare gtest_main.cc. – PSyton

+0

Supponiamo che io voglia effettivamente utilizzare le chiamate JNI, come posso ottenere o creare JavaVM *? – syvex