Android 单元测试

中午
650 字
4 分钟
...阅读
...评论
成都

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

很早就知道 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 单元测试就介绍到这里,以后可以很轻松地对某个类进行测试了,而不需要运行整个项目。

评论区
Copyright © Bean Deng