对于Android开发来说,调试和测试都非常重要,现在十分流行的是TDD开发,测试驱动开发,再分析完需求之后,做出功能表和业务逻辑的概要设计,就可以通过需求和设计开发测试用例了,再围绕着符合实际需求的测试用例开发项目。当然测试用例和项目开发的顺序并不是非要那么绝对,再完成了测试用例后开始开发项目的过程中也可以反过来继续完善测试用例,要做到十分灵活的运用测试,相辅相成,以测试结果为驱动,小步伐的一步一步开发项目,会让你提升很大的效率,也会是项目开发变得愉快和轻松。
例如我的入口Activity是一个登录页面,那么相应对应的测试用例就应该先写,测试目的就是输入任意的账号和密码不能报错,也不能有漏洞,而且要符合一定的规则,在这里可以根据自己的经验在测试用例的代码中放入一些很极端的值或者是零界值。然后我们围绕着测试结果开发项目代码,一般开发一边运行测试用例,如果报错就说明我们的账户和密码验证有BUG,那么继续围绕测试结果不断的完善代码。
对于业内公认的测试框架是XUNIT, javaSE和javaEE 使用的是JUNIT,C/C++使用的CUNIT,那么Android的测试框架也是基于JUNIT的。为什么Android不直接使用JUNIT呢,那是因为Android有很多特殊的组件,他们拥有不受代码控制的生命周期,所以只能基于JUNIT进行二次开发,可以模拟或者截断原生组件运行的生命周期,另外Android测试框架式基于junit3的,所以测试方法以test开头,而并且junit4的注解风格。
Android的测试类都是基于junit.framework.Assert这个类的,存放于android.test包下。除了broadcastreceiver以外,android的常用组件分别定制了适合它们的测试类和接口。
测试项目和普通android开发项目的结构式一模一样的。在创建了开发项目以后,可以创建测试项目,然后包含开发项目。
对于普通类的测试可以直接使用TestCase或者AndroidTestCase,例如你在Android开发项目里写的一些工具类,这些工具类对Android项目没有任何依赖性,所以测试时不需要涉及到Android各种生命周期的。
我们先创建一个Hello工程,同时在创建Hello的对话框里顺便创建Hello的测试工程,这样测试工程就包括了Hello的工程:
然后在Hello工程中创建一个工具类Checker,用于验证输入框的账号是否符合要求:
public class Checker { public static boolean checkID(String id) { // ..... operations..... return true; } }
然后在HelloTest工程中创建Checker的测试用例Test_Checker并在testCheckID方法中测试checkID方法:
public class Test_Checker extends TestCase { private Checker checker; protected void setUp() throws Exception { super.setUp(); checker = new Checker(); } protected void tearDown() throws Exception { super.tearDown(); } public void testCheckID() { //这里填入各种极端的字符串来验证checkID方法是否有BUG assertEquals(true, checker.checkID("zhangsan")); assertEquals(true, checker.checkID("lisi")); assertEquals(true, checker.checkID("panda_user")); assertEquals(false, checker.checkID("1user")); assertEquals(false, checker.checkID("~/2fds34")); } }