Как использовать googletest для тестирования кода на С++, который вызывает java на android?

Я работаю над довольно сложной библиотекой С++, которую я планирую правильно протестировать с помощью googletest для Android NDK.

До сих пор я следую примеру Google test и строю проект следующим образом:

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)

Я создаю и вызываю тест с помощью файла 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"

Это отлично работает с любым чистым кодом на С++, который не имеет много ссылок, но многие из моего кода фактически используют java/jni-вызовы. Как запустить googletest с полным файлом apk, который поставляется не только с кодом С++, но также с java и ресурсами?

Ответ 1

Внутри вашей тестовой программы у вас будет функция main(), которая выглядит примерно так:

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

Это позволяет вам вызывать тестовую программу, как и любую другую: просто введите имя исполняемого файла в оболочке.

Дополнительная информация:

https://github.com/google/googletest