/ 技术

Android单元测试

今天终于向让我退缩了很久的单元测试前进了一步。

很早就知道Android里可以建立测试项目,但我一直不明白怎么去用,也总觉得我的这些个小项目,需要用到测试这么高端的东西吗?今天突然对之前搁置很久的全能计算器的重构有了一些灵感,写了个计算专用的工具类,然而,之前项目中有不少错误,现在是没法运行的,于是,我只想对这个工具类进行测试,怎么做呢?

如果不用单元测试的话,得先把整个项目的错误改掉,编译成功,然后通过日志输出的方式来测试那个类,但相当繁琐。如果使用单元测试的话,就相当轻松啦。

Android里的单元测试有两种方式,一种是建立一个新的测试项目(Android Test Project),那个似乎是对整个项目进行测试的,没有仔细去了解,还是比较庞大,跟我们这里的要求不符。

另一种方式,则是在需要测试的项目里新建一个测试类,继承AndroidTestCase,然后运行时使用Android JUnit Test的方式运行就可以了。

下面开始看代码:

首先,需要对项目的AndroidManifest.xml文件进行一些改动

<application>结点里加入:

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

结点外加入:

<instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:label="Test"
    android:targetPackage="你的包名" />

注意,此处的包名一定要与最上方的

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="包名"
    android:versionCode="版本号"
    android:versionName="版本名" >

这里的包名一致。

同时,还需要添加权限,也在<application>外:

<uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />

下面,新建一个类,我是新建的一个CalcTest类,用来测试Calc类的运行情况:

public class CalcTest extends AndroidTestCase
{
    private static final String TAG = "CalcTest";

    public void testPlus()
    {
        String answer = Calc.add("1.31", "4.63");
        Log.i(TAG, answer);
        Assert.assertEquals("5.94", answer);
    }

    public void testMinus()
    {
        String answer = Calc.subtract("1.7", "1.6");
        Log.i(TAG, answer);
        Assert.assertEquals("0.1", answer);
    }
}

Assert是junit里的一个类,比如我使用的是assertEquals方法,如果两个参数的值相等,则运行时不会报错,如果值不等,则会报错。

编写好测试类之后,右击,运行方式里选择Android JUnit Test,然后等待即可。

测试成功的截图:

图1

如果我们把testMinus()中的Assert.assertEquals(“0.1″, answer)改成Assert.assertEquals(“0.2″, answer),再运行的话,就会出现:

图2

可以在故障跟踪里看到到底哪里出了问题。

好了,简单的Android单元测试就介绍到这里,以后可以很轻松地对某个类进行测试了,而不需要运行整个项目。

by 邓斌HADB of 好易思特HAOest
2012-7-31中午于成都