首页 > Android NDK > Android native代码单元测试

Android native代码单元测试

2012年3月26日 发表评论 阅读评论

转载时请注明出处和作者联系方式: http://mogoweb.net mogoweb@gmail.com

Android为Java层应用程序提供了基于JUnit的单元测试框架,本文探讨的是native代码的单元测试。native代码的单元测试框架选择很多,如CppUnit/UnitTest++/gtest等等。惭愧的是,虽然一直在android下从事native程序的开发,却一直没有写过单元测试用例,究其原因,主要有两个:一是赶项目进度,上头关心的是代码何时完成/功能何时完成,这也符合中国的国情,第一时间忽悠客户才是要务。至于代码质量,no one care,只要演示时不出状况就行,至于问题,可以慢慢解决;二是没有顺手的单元测试工具,从单元测试用例的编写,到部署,都是一个非常耗时的工作,如果没有工具自动化,积极性容易受挫。

其实写代码的人都知道,bug发现越晚,修复的代价越大,但是习惯上的惰性使得我将排查问题的时机尽量拖后,基本上没有写过单元测试用例。近期一直在关注chromium for android项目,左等右看,就是看不到完整的android移植代码。兵书上说,兵马未动,粮草先行,最先出现的android编译目标就是base_unittests,细看代码,chromium代码中有着非常多的unittest代码,使用了gtest/gmock单元测试框架。为了达到自动化测试的目的,src/build/android下还有大量的python脚本,可以实现编译/部署/运行的一系列动作的自动化。

chromium项目非常的庞大,为了能够在android native项目中使用它的单元测试框架,我从chromium中抽取出gtest/gmock/base等代码,使用ndk编译成库,还提取了build下的python脚本,稍微做了些修改。现将相关代码放到github,有兴趣的可以访问https://github.com/mogoweb/ndk-gtest.

gtest单元测试用例通常在命令行程序中运行,但有时需要测试Jni调用接口,这时就需要APK包了。这带来了一个问题,因为gtest默认是往stdout/stderr输出信息的,而Android系统默认将送往stdout/stderr的输出输向/dev/null。为了能够看到gtest信息,需要重定向输出。可以使用如下命令做到:

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start

转载时请注明出处和作者联系方式: Android native代码单元测试 mogoweb@gmail.com

分类: Android NDK 标签: , ,
  1. gameplayer
    2012年3月27日08:46 | #1

    给你的gmail留了封信,请查收。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.