在做项目的时候很多时候通常需要用单元测试来测试自己写的代码是否正常运行,可以将一些潜在的bug扼杀在程序出生阶段,尤其是团队合作的大型项目,一定要避免最后才进行单元测试和整合,每天花不到一小时利用单元测试审核自己的代码比在过了项目周期一个月甚至更长时间后利用几天的时间解决很没有技术含量的细节问题而有效率得高,这也是作为优秀程序员的一个好习惯,不过关键是要实践在平时,养成好习惯。推荐大家看《高效程序员的45个优秀习惯》。
那如下在Android中利用单元测试Junit,下面我通过两个方法给大家做一下实例,希望对大家在开发的过程中有帮助:
1. 在项目中直接建立Junit。
例如我们已经建立了如下代码的文件,其中包含了一些我们自定义的方法:
package com.example.junittestService; public class Service { public void Str_Test(String str) { String temp = str.substring(2); } public int Simple_add(int a,int b) { return (a+b); } }
2.单元测试Junit要实现的就是用代码来检查我们的编码是否纯在问题。下面我们编写代码检查上面的几个方法。
其实在项目中建立Junit就是建立一个class,然后编写对应的要测试的方法:
package com.example.junittestService; import junit.framework.Assert; import android.test.AndroidTestCase; public class TestService extends AndroidTestCase { public void testStr_Test() throws Exception { Service test_service = new Service(); test_service.Str_Test(null); } public void testSimple_Add() throws Exception { Service test_service = new Service(); int result = test_service.Simple_add(1, 3); Assert.assertEquals(4, result); } }
注意单元测试要继承AndroidTestCase这个父类。另外在编写单元测试的方法时一般方法名称都是test加上要测试的方法。建议一定要加上异常处理,即将异常抛向AndroidTestCase中进行处理。
在上面代码中我们实例化了一个需要测试的类的对象test_service,然后调用其中的方法并记录其返回值,Assert.assertEquals(arg1,arg2),中第一个参数用于说明我们期望的值,即正常情况下这个值应该是多少,第二个参数是实际执行的结果,通过比较可以得到这个方法是否正确。
3. 加入单元测试的依赖库,由于我们是直接在Android项目中建立的单元测试,在AndroidMainfest.xml中加入:
//将单元测试依赖库的组件引入进来项目中
<uses-library android:name="android.test.runner" />
//注意要放对位置,这个需要加入到application中,而不是activity中。
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.junittest" android:label="tests for junittest" />
//配置单元测试框架的启动装置
//这个代码是放到application外面,其中targetPackage一定要指定正确,即要测试的包;label可以随便定义,也可以不指定
4.运行单元测试。
这个相信大家都比较期待在写好了单元测试后如何使用它来见证效果,那么我们运行单元测试和运行Android项目是不同的。
首先需要打开Eclipse的Outline窗口,其中列出了所有我们的方法:
然后,右键点击所需要测试的方法,Run As->Android JUnit Test,注意选错了是不行的。
然后在JUnit窗口中可以看到结果,绿色表示正确,红色表示有问题。
当然我们第为一个Str_Test方法编写的单元测试传递过去的是一个null值,运行不会通过,此时显示红色表示有问题,第二个Simple_Add方法传递一个1+3和期望值期望值4相同,显示绿色表示运行正常。
单元测试也就是通过给我们编写的方法传递某些值进行测试对应的方法是否正确的一个机制。
还有另一种建立单元测试的方法就是独立于Android项目,建立Android Test Project,建立的时候需要指定要测试的项目,这种方法不需要加入单元测试的依赖库,它已经自动为我们配置好。由于时间关系这个不再详细说明,有需要的可以自己建立测试。
利用好单元测试可以在很大程度上减轻我们的开发任务,尽可能减少后期bug。以上是我对此理解,希望对大家有帮助。