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,然后等待即可。
测试成功的截图:
如果我们把 testMinus()中的 Assert.assertEquals(“0.1″, answer)改成 Assert.assertEquals(“0.2″, answer),再运行的话,就会出现:
可以在故障跟踪里看到到底哪里出了问题。
好了,简单的 Android 单元测试就介绍到这里,以后可以很轻松地对某个类进行测试了,而不需要运行整个项目。
近期开发小结
2012-08-24
很久没有写博客了,主要是这些天在忙着开发校友录的网站,从 php、js 的门外汉,逐渐跨进了门儿,虽然开始的框架、布局、样式都是在模仿,布局大多是模仿的 github 的网站,因为我发现它的个人资料修改的界面很合我意,简单清爽而且不老土,于是花了一两天才把网站的基本框架界面搭好了,要知道,我对 CSS 以前几乎是一窍不通的,哈哈,还是很有成就感的。由于有 java 的基础,在接触 js 的时候也就没什么困难了,也只有 ajax 操作那块有个异步操作让我费了不少心,显示的提示图片总是不正确,后来就没有用异步,直接等完成之后再继续下面的代码。
C# 获取指定网卡的 IP 地址
2012-07-28
最近几天都在玩游戏,没怎么编程,感觉好空虚啊!主要是之前在 Android 上建立 wifi 热点出现了一些问题,难以进展下去,于是便耽搁了,今天决定先跳过那个问题,Android 手机之间的传输先暂时不考虑,先做一下 Android 与 PC 之间的数据传输。