像以前学习Java时用单元测试检查自己写的方法是不是能行得通一样,android也可以进行单元测试来检查自己写的方法来排除障碍。下面就来详细说说单元测试的过程。
首先新建一个android的工程JunitTest,选择的android版本为2.2.3,由于单元测试直接在MyEclipse中进行而不是在应用程序中进行,因此你不必选择创建“activity”(想一想这与activity有什么关系呢?)接着在项目的AndroidManifest.xml添加如下所示黑体加粗的代码,注意代码的顺序:
…………. <uses-sdk android:minSdkVersion="10"/> <instrumentationandroid:name="android.test.InstrumentationTestRunner" android:targetPackage="com.yqsn.junittest"></instrumentation> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner"/> <activity android:name=".JunitTestActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> ………………………….
这段代码的意思是:
●instrumentation为单元测试的入口。由于我们每次启动项目时程序都会启动一个application实例,因此需要加载一个activity,而activity是有图形界面的。我们单元测试只是测试代码,因此,你可以把instrumentation看成是一个没有图形界面、监控其他类的工具类。
●android.test.InstrumentationTestRunner为单元测试的主要类,android:targetPackage里面写的是哪个包下要测试的类。
●uses-library要与activity处于同一级。注意的是instrumentation与uses-library中的android:name都不要写错。
下面开始写测试类,注意测试类必须继承AndroidTestCase类,代码如下所示:
package com.yqsn.junittest; import junit.framework.Assert; import android.test.AndroidTestCase; import android.util.Log; public class JunitTestDemo extends AndroidTestCase { publicvoid testSave() throws Throwable{ inti=1+1; Assert.assertEquals(3,i); } }
现在开始测试,我们在MyEclipse中打开outline视图,在outline视图我们可以清楚的看见我们的测试类JunitTestDemo,展开这个类,又可以看见要测试的方法,我们测试则只需要对着这个方法右键选择Run As—>Android Junit Test,如下所示,
由于在这个类中我们只是测试i是否等于3,因此显然是不相等的,因此我们运行后会在junit控制台看到红色的标志:
我们将 Assert.assertEquals(3,i);方法中的3改为2,则会显示绿色通过的标志:
如果出错了我们怎么解决呢?你也许会想到查看控制台console,但是会让你很失望的是控制台不会打印出字符串,例如你想通过在方法中System.out.println(“Hello World !”)输出“Hello World !”,控制台除了输出应用安装信息你不会看到其他信息。那么怎么办呢?
在android中我们通过android.util.Log类中的静态方法查看输出信息。Log类输出日志的内容从少到多分别是ERROR,WARN,INFO,DEBUG,VERBOSE,对应的方法分别是Log.e(),Log.w(),Log.i(),Log.d(),Log.v()这5个静态方法,不说你也知道是什么意思。
下面开始编写日志输出测试来,我们将前面那个类改编一下,代码如下所示:
package com.yqsn.junittest; import junit.framework.Assert; import android.test.AndroidTestCase; import android.util.Log; public class JunitTestDemo extends AndroidTestCase { privatestatic final String HTC=" JunitTestDemo "; publicvoid testSave() throws Throwable{ inti=1+1; Log.i(HTC,"i="+i); Assert.assertEquals(2,i); } }
这里面用到的Log.i(String tag,String msg)中的tag指的是为这条信息定义一个标签,一般命名与类名相同,这样方便查看是哪个类输出的。而msg则表示要输出的内容。
下面开始测试,与单元测试步骤一样。接下来查看日至信息。我们打开LogCat选项卡,如下所示:
我们点击Saved Filter边上的“+”,则会弹出一个过滤框。我们在Filter Name中输入定义的常量名”HTC”,在by Log Tag中则输入标签,也就是类名“JunitTestDemo”,如下所示:
点击“ok”保存之后,点击HTC,选择“info”,则会看到输出的结果!
好了,单元测试与日志输出就介绍这么多了,下节将好好学习debug。
这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7437619,谢谢~