一、什么是单元测试

  单元测试是检查软件设计中小单元正确性的测试。单元,指的是一个应用程序中小的可测部分,在Android/OPhone应用中,我们可以把单元定位为某一个方法。因此,Android/OPhone单元测试是验证代码中每个方法实现正确与否的测试。

  单元测试属于白盒测试。因为代码的作者是了解代码结构和内部逻辑的人,因此单元测试好是由开发人员自己完成。

  二、单元测试的重要性

  单元测试可以帮助开发人员提高代码质量,保证代码实现与设计的一致性,提高代码的健壮性和可测性;

  开展单元测试,能将缺陷扼杀在编码阶段。缺陷发现得越早,修改的时间成本和人力成本越低。

  功能测试、系统测试等黑盒测试从UI发起,不能保证遍历到所有的代码实现,会导致很多隐藏问题。单元测试能从源头上大限度减少此类问题的发生。

  在需求频繁变更导致代码频繁变化时,单元测试可以帮助开发人员避免修改代码引入新的错误

  三、Android/OPhone单元测试框架

  Android/OPhone平台中整合了JUnit 3测试框架和Instrumentation机制。通过它们,可以对OPhone应用进行有效的单元测试。

  四、OPhone单元测试基础

  OPhone单元测试的基本方法与一般的基于JUnit的单元测试类似,这里简单介绍下JUnit框架:

  JUnit框架为Java单元测试提供了如下功能:

  ● 断言 (Assertion), 以在测试之前或之后测试预期值。

  ● 测试固件(fixture),以模拟正在接受测试的代码正常运行所需的环境(包括所有必需的对象)。

  ● 测试套件(suite),以将各个测试用例组合到一起。

  ● 测试运行器(runner),以运行测试并捕获和报告测试是成功还是失败。

  大多数情况下,创建一组单元测试也是创建从某个JUnit 测试用例类继承的类,并向该类添加新方法以执行各个单元测试。

  在JUnit 框架中,Test Case指的是一个包括若干个测试方法的Java类,但实际上,每个测试方法才是我们一般理解中的测试用例。

  下面是一个标准JUnit单元测试类的实例。

  在ExampleTest例子中

  ExampleTest继承自junit.framework.TestCase,setUp()和tearDown()是测试固件,setUp()中设置测试的初始条件,tearDown()负责清除测试环境,保证每个测试用例执行时环境的独立性。

  testReading1() 和testReading2()是实际的测试用例,它们的修饰符必须是public,返回值为void,方法名必须以test为前缀。

  test方法中的assertNotNull()和assertEqual()都是断言语句,是每个测试用例中的结果校验点。