`
coolerbaosi
  • 浏览: 725128 次
文章分类
社区版块
存档分类
最新评论

android基础知识12:android自动化测试03—基于junit的android测试框架03

 
阅读更多

本文主要介绍如何运行junit测试。

7、如何运行junit测试

前面我们学习了很多JUnit的程序,在Android ADT插件中已经为我们提供了很多这方面的功能,方便我们进行单元测试。但是如何进行单元测试,例如在ApiDemos\test提供的测试例子程序如何运行,对于我们这些初学者来说有些茫然,我也是在网上查找了不少这方面的的资料学习,才知道如何运行测试单元,因此在这里总结说明与大家分享。总结起来,大概有4种不同的方法:

7.1 使用ADT 运行测试单元
在Eclipes中选择工程,单击右键,在Run as/Debug as子菜单选项中选择Android JUnit Test,如下:


单击运行后,应用程序将启动,在Eclipes中会出现个新的面板JUnit,如下:


这个界面上就显示了测试的结果,这种方法操作比较简单,但是要想自己写单元测试就的必须深入的去了解后面2中运行的方法。

7.2通过AVD 运行测试单元

运行AVD,选择Dev Tool,当前界面如下:


双击Instrumentation后,界面如下:


测试例子开始运行,在LogCat中查看运行过程输出的信息,界面如下:


这些信息就是测试例子输出的信息。
7.3 通过adb shell 命令运行测试单元
这种方法应该是为linux程序员设置的,完全的命令行,使用起来相对比较麻烦,命令格式如下:


按照上面的命令行格式,输入:adb shell am instrument -w com.xmobileapp.hello/android.test.InstrumentationTestRunner

运行后的界面如下:

测试结果的信息与第2种方法中的logCat中输出的信息是完全一样的。

7.4 错误提示说明
在运行测试例子的过程中,也会遇到了不少的错误提示,总结如下:
单击“Android JUnit Test”运行后,出现“Android Launch”错误提示,如下:


这个错误的原因估计是:AndroidManifest.xml配置错误,关于这个问题的分析说明,请阅读An instrumention test runner is not specified篇幅中的说明。
使用adb shell am命令运行,出现“Error = Unable to find instrumentation info for……..”错误信息,如下:

遇到这个问题Error = Unable to find instrumentation info for……..可试试
adb shell pm list instrumentation 查看你的设备有没有安装这个instrumentation测试包,使用adb shell am instrument -w 必须要在设备上安装测试包。

7.5 总结说明

看了这些,对instrument是不是有很大的困惑,下一篇幅我们将学习Android SDK 中的instrument。为了方便大家学习上面的运行测试单元的方法,一个简单的例子供大家下载,这个例子中包含一个Activity(Hello)以及对这个Activity(HelloTest)的单元测试2部分,大家可以使用上面介绍的方法来启动单元测试。

8 android junit学习总结

在学习Android、JUnit的过程中,随着学习的深入,将Android、JUnit的类按照继承关系整理如下:
Test—TestCase—AndroidTestCase
Test—TestCase—InstrumentationTestCase
Test—TestSuite—InstrumentationTestSuite
TestListener——BaseTestRunner—AndroidTestRunner
Instrumentation—

InstrumentationTestRunner
上面的5条路线,也是我们不断学习的过程,对于前4条路线感觉自己解析的都比较清楚,最后一条路线似乎说的不是很清楚,后来我又查看了不少这方面的资料,对Instrumentation再次说明下。
每个Android 应用程序运行在自己的进程,Instrumentation杀死当前应用程序,并重新启动应用程序(restarts the process with Instrumentation)。 Instrumentation提供给我们一个应用程序上下文的Handle,通过这个Handle我们可以洞察应用程序,从而验证测试断言,我们还可以通过它来写一些比界面测试更加底层的测试用例。需要强调说明的是:Instrumentation不能捕获UI方面的bugs。
Android在JUnit的基础上扩展出来的、与Instrumentation有关的3个类:

以上说明来自网页Instrumentation Testing(英文的),在这里推荐给大家阅读。

JUnit的使用心得

JUnit是采用测试驱动开发的方式,也就是说在开发前先写好测试代码,主要用来说明被测试的代码会被如何使用,错误处理等;然后开始写代码,并在测试代码中逐步测试这些代码,直到最后在测试代码中完全通过。
看了是否感觉有些不符合程序员的思维习惯(先写代码然后在调试),的确这也是JUnit是对程序员思维习惯的“颠覆”。在这里我自己也感觉,好像很难做到,为什么?在一匹“马”没有完全设计好前,怎么规定这匹“马”将来会如何跑?而且即使把“马”将来会如何“跑”定义好了,在实现的时候“马”被改变了怎么办?说到底还是:一个人不能同时具有2个角色,否则自己有时候就不知道当前是哪个角色!
说到这里,我就说明下,我自己对JUnit “错误”的使用方法,这也许与JUnit测试驱动开发的目的相矛盾,但是的确可以有效地减少bug。JUnit从核心来说就是将源代码与测试代码完全分开,将测试代码作为一个单独的程序。前面介绍的方法,都将源代码与测试代码合为一体,由于源代码的重要性大于测试代码的重要性,所以测试代码经常有不完整、结构不清晰等问题,这样程序员的单元测试也就不完整。JUnit就是被我用来做完整的单元测试,对当前的部分代码,测试其在每种“环境”下的运行结果。

后记说明

这是网络上看到的一个系列文章,对junit做了比较想尽的介绍。看了这些文章,估计可以对android junit测试有一个比较初步的了解。我自己也只是看了这些文章,然后看了下例子以及部分源代码。对一些细节还不是很了解,后续会深入阅读一下相关源码,特别是ApplicationTestCase以及Runner的部分。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics