您的位置:首页 > 移动开发 > Android开发

【Android开发-6】了解内情,我们需要一些调试和测试手段

2014-08-12 01:07 766 查看
前言:人生不可能十全十美,总会有些遗憾存在,经历过遗憾,我们才懂的什么是生活。程序也一样,追求完美,就必然会有经历bug存在的时候。经历过不断的bug磨练,我们技术才会不断的成长。对于调试bug,通过一些方法和手段就会发现它原来如此。当一切恍然大悟时,就会发现缺陷也是一种美,因为它让你更了解自己,或者说让你更加了解你的程序。

第一、打印输出调试

Android程序在虚拟机运行时,我们如果通过System.out.print(),输出调试信息,我们在控制台是看不到的。所以我们有时候调试,后台要输出一些东西,该怎么办。没关系,Android提供了一个强大的android.util.Log 类. 我们可以运用如下:

Log.v("verbose","详细信息级别--1级");
Log.d("debug","调试信息级别--2级");
Log.i("info","提示信息级别--3级");
Log.w("warn","警告信息级别--4级");
Log.e("error","错误信息级别--5级");

Log中的第一个参数:代表一个标签Tag说明 ;第二个参数:代表调试信息



程序运行后,会在Eclipse界面中的LogCat输出如下内容:



从上面可以看出:不同级别,颜色代表也不同,这样就易于调试观察了。如果界面有很多类型相同的调试日志信息,左边栏点绿色的+,还可以添加过滤器,只显示某标签Tag的调试日志,如下面只显示Tag标签为debug的





第二、单元测试

单元测试,演示步骤:

1.新建一个项目,比如叫TestAndroidJunit,建完目录如下:



2.一个项目中一般有多个业务功能类,对于业务功能类,有时候一个团队,个人弄完需要验证正确后,才提交到svn中。这时候单元测试调bug就很重要了。右键src,新建class类MyFunction如下:

package com.wyz.myfunction;

import android.util.Log;

public class MyFunction {

public void SayHello(String str)
{

Log.d("SayHello",str);

}

public int Add(int a,int b)
{
return a+b;
}
}


3.在TestAndroidJunit中AndroidManifest.xml的文件加入如下内容:

 <uses-library android:name="android.test.runner" /> 

<instrumentation  

        android:name="android.test.InstrumentationTestRunner"  

        android:targetPackage="com.wyz.testandroidjunit" />

记住加的位置如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wyz.testandroidjunit"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="android.test.runner" />
</application>

<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.wyz.testandroidjunit" />
</manifest>
注:上面的<instrumentation>中的android:targetPackage属性值设置需跟本项目的包名一致,即

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.wyz.testandroidjunit"

    android:versionCode="1"

    android:versionName="1.0" >

中的package="com.wyz.testandroidjunit"

4.右键项目中src文件夹新建一个测试单元类,设置如下:



点Browser浏览继承类AndroidTestCase



5.单元测试类中的内容编写如下,主要是对项目中类MyFunction的方法测试:

package com.wyz.testunit;

import junit.framework.Assert;

import com.wyz.myfunction.MyFunction;

import android.test.AndroidTestCase;
import android.util.Log;

public class TestMyFunction extends AndroidTestCase {

public void testSayHello() throws Exception
{
MyFunction myFunction = new MyFunction();
myFunction.SayHello(null);

}

public void testAdd() throws Exception
{
MyFunction myFunction = new MyFunction();
int c = myFunction.Add(3, 4);
Log.d("add", String.valueOf(c));
Assert.assertEquals(7, c);
}

}


6.在单元测试类写好上述代码后,我们就可以对MyFunction类中的两个方法进行测试,找到Outline视图:



如果我们要测试testAdd(),我们只需在Outline中找到对应的testAdd(),然后右击,Run As->Android Junit Test,

结果如果正确,显示如下:



如果要显示错误,只需把断言中的7改成其他数字就可以演示出错误了。

注:上面必须先运行安卓模拟器,然后运行单元测试模块,这样单元测试模块才可以部署安装。

调试和测试方法很多,还有用写入文件,真机调试等,许多东西还得一步步实践,才能认知!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: