【问题标题】:Unit testing on Android NDKAndroid NDK 上的单元测试
【发布时间】:2013-08-10 05:19:00
【问题描述】:

如何在 Android 原生代码(原生 C/C++, Java)上运行单元测试?到目前为止,我只找到了one 类似的问题,并且答案说将 junit 与 JNI 一起使用,我不想这样做(添加 JNI 调用对于单元测试来说似乎不必要地复杂,并且并不是真正的单元测试无论如何都是原生代码)。

CppUnit(也建议在那里)真的可以在 Android 上运行吗?请注意,我希望测试在设备上本地运行,而不是在主机开发环境上。 This 看起来像安卓移植,值得一看吗?

googletest 这样的官方 Google 测试框架是理想的,但这似乎不适用于 NDK。

【问题讨论】:

    标签: unit-testing android-ndk


    【解决方案1】:

    我通过 NDK 使用 googletest 我使用 $(调用 import-module 来引入主 .so,然后在可执行文件中有一个看起来像的单个文件

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

    然后我用 BUILD_EXECUTABLE 构建它,像这样部署它:

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

    然后运行它

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

    所以它不测试应用程序生命周期,而是测试所有单元测试。

    如果我需要使用 UI 测试某些东西,我可以做类似的事情,但将现在的“主要”功能设为原生函数,并在加载 Activity 时调用它。

    【讨论】:

    • 谢谢!我们会检查一下。我没有意识到你也可以构建可执行文件。
    • 您也可以构建和链接 gtest_main.cc。
    • 假设我想实际使用 JNI 调用,如何获取或创建 JavaVM*?
    • @syvex,只需实现jint JNI_OnLoad(JavaVM* vm, void* reserved); 并存储JavaVM *
    • JNI_OnLoad 应该如何工作?这是一个纯 C++ 可执行文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2017-03-02
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多