23 votes

Tests unitaires sur Android NDK

Comment exécuter des tests unitaires sur du code natif Android (C/C++ natif, no Java) ? Jusqu'à présent, je n'ai trouvé que un Question similaire, et la réponse dit d'utiliser junit avec JNI, ce que je ne veux pas faire (ajouter des appels JNI semble inutilement compliqué pour les tests unitaires, et n'est pas vraiment un test unitaire du code natif de toute façon).

CppUnit (également suggéré ici) fonctionne-t-il vraiment sur Android ? Notez que je veux que les tests s'exécutent nativement sur l'appareil, et non sur l'environnement de développement hôte. Ce site ressemble à un portage Android, cela vaut-il la peine de s'y intéresser ?

Un cadre de test officiel de Google comme googletest serait idéal, mais cela ne semble pas fonctionner avec le NDK.

18voto

kortina Points 169

J'utilise googletest à travers le NDK, j'utilise un $(call import-module pour amener le .so principal et ensuite j'ai un seul fichier dans l'exécutable qui ressemble à ceci

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

Et ensuite je construis cela avec BUILD_EXECUTABLE, je le déploie comme :

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

et l'exécuter comme

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

Il ne teste donc pas le cycle de vie de l'application mais il teste tous les tests unitaires.

Si j'avais besoin de tester quelque chose avec une interface utilisateur, je pourrais faire quelque chose de similaire mais faire de ce qui est maintenant "main" une fonction native et l'invoquer lorsque l'activité est chargée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X