2017-01-20 1 views
11

Je travaille sur une bibliothèque C++ plutôt compliquée que je prévois de tester correctement en utilisant googletest pour Android NDK.Comment utiliser googletest pour tester le code C++ qui appelle Java sur Android?

Jusqu'à présent, je suivre l'exemple de test Google et la structure du projet comme celui-ci:

Android.mk:

LOCAL_PATH := $(call my-dir) 

    include $(CLEAR_VARS) 
    LOCAL_MODULE := foo 
    LOCAL_SRC_FILES := foo.cpp 
    include $(BUILD_SHARED_LIBRARY) 

    include $(CLEAR_VARS) 
    LOCAL_MODULE := foo_unittest 
    LOCAL_SRC_FILES := foo_unittest.cpp 
    LOCAL_SHARED_LIBRARIES := foo 
    LOCAL_STATIC_LIBRARIES := googletest_main 
    include $(BUILD_EXECUTABLE) 

    $(call import-module,third_party/googletest) 

Je construis et appeler le test en utilisant un fichier de script:

adb push libs/armeabi/libfoo.so //data/local/tmp/ 
adb push libs/armeabi/libgnustl_shared.so //data/local/tmp/ 
adb push libs/armeabi/foo_unittest //data/local/tmp/ 
adb shell chmod 775 //data/local/tmp/foo_unittest 
adb shell "LD_LIBRARY_PATH=//data/local/tmp //data/local/tmp/foo_unittest" 

Cela fonctionne très bien avec tout code C++ pur qui n'a pas beaucoup de références mais beaucoup de mon code repose en fait sur des appels java/jni. Comment puis-je exécuter googletest avec un fichier apk complet qui ne vient pas seulement avec du code C++ mais aussi java et des ressources?

Répondre

2

l'intérieur de votre programme de test, vous aurez une fonction main() qui ressemble à ceci:

int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

Cela vous permet d'appeler le programme de test comme tout autre: il suffit de taper le nom de l'exécutable dans une coquille.

Plus d'info sur:

https://github.com/google/googletest

+0

mais comment pourrais-je combiner cela avec un apk? – Luz

+0

Vous pouvez créer un rappel dans Java, puis l'appeler à partir de JNI pour installer le package téléchargé. – Shobhit