今天终于向让我退缩了很久的单元测试前进了一步。
很早就知道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,然后等待即可。
测试成功的截图:
如果我们把testMinus()中的Assert.assertEquals(“0.1″, answer)改成Assert.assertEquals(“0.2″, answer),再运行的话,就会出现:
可以在故障跟踪里看到到底哪里出了问题。
好了,简单的Android单元测试就介绍到这里,以后可以很轻松地对某个类进行测试了,而不需要运行整个项目。
by 邓斌HADB of 好易思特HAOest
2012-7-31中午于成都