Android学习笔记(7)---单元测试与日志输出


        像以前学习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,如下所示,


Android学习笔记(7)---单元测试与日志输出_第1张图片


      由于在这个类中我们只是测试i是否等于3,因此显然是不相等的,因此我们运行后会在junit控制台看到红色的标志:


Android学习笔记(7)---单元测试与日志输出_第2张图片


        我们将  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选项卡,如下所示:


Android学习笔记(7)---单元测试与日志输出_第3张图片


        我们点击Saved Filter边上的“+”,则会弹出一个过滤框。我们在Filter Name中输入定义的常量名”HTC”,在by Log Tag中则输入标签,也就是类名“JunitTestDemo”,如下所示:


Android学习笔记(7)---单元测试与日志输出_第4张图片


       点击“ok”保存之后,点击HTC,选择“info”,则会看到输出的结果!

 

Android学习笔记(7)---单元测试与日志输出_第5张图片



           好了,单元测试与日志输出就介绍这么多了,下节将好好学习debug。


           这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7437619,谢谢~






你可能感兴趣的:(android,MyEclipse,单元测试,测试,JUnit,HTC)