iOS 小册iOS测试发布相关iOS开发

测试驱动的 iOS 开发-简介与技巧

2016-12-09  本文已影响455人  fuyoufang

在项目的进展过程中,随时都可能出现 bug。产生 bug 的时间和发现 bug 的时间相隔越久,修复 bug 的成本会越来越大。所以,现在的软件项目管理方法力争在产品开发的全过程中对每个部件都进行持续的测试。

程序中的 bug 并非总是可以通过一般性的尝试就可以找到,所有系统测试员需要预设一定的测试目标。测试员根据测试目标分为:

测试驱动开发

极限编程迷恋者们所采用的开发方式就是测试先行(test first)或者测试驱动开发,顾名思义,即在写产品代码之前先写测试用例。

如果一次写好所有的测试用例,然后回过头来写全部的产品代码,那么你得把应用程序中需要解决的每个问题都思考两遍,而且这两次之间会隔很久。所以测试驱动开发者不会一次写好所有的测试用例。不过他们还是不会在某个用例写好之前就去写对应的产品代码。

测试驱动的优势:

测试的原则

在制定测试方案时,有以下原则:

测试驱动的过程

测试驱动开发分为三个阶段:先写一个不能成功执行的测试用例,再编写实现代码使测试用例成功执行,然后在不改变程序行为的情况下对代码进行重构。

单元测试

单元测试得名于其所测试的代码“单元”,在面向对象软件开发中,这样的“单元”通常指的就是类。对于复杂的受测代码应该赋予更高的权重。代码的复杂度与代码中包含的循环与分支数相关,或者说,与代码的执行路径数有关。

单元测试将应用程序的代码隔离成一个个孤立的小部分,以此来追查程序中的问题,这样很容易就能定位到导致测试用例执行失败的代码。

单元测试的特征

一个设计良好的测试用例有以下特征:

XCode 中的测试框架

OCUnit 测试框架是在 XCode 2.1 版本时被 Apple 集成在开发环境当中的。XCTest 是 Xcode5 中新引入的一个测试框架,它的许多的功能都类似于之前的 OCUnit,是上一代测试框架 OCUnit 的更现代化实现。XCTest 提供了与 Xcode 更好的集成并且奠定了未来改进 Xcode 测试能力的基础。

在单元测试的测试类中,相似的测试方法之间可能会出现重复的代码,因此 XCTest 单元测试框架建立了“测试固件”(test fixture), 来为每一组测试用例提供相同的运行环境。将使用相同运行环境的的测试用例抽取到一个测试固件中,每个测试用例都会运行在这个测试固件的某一份副本当中。采用这种方法之后,每个测试都会有自己的运行环境,而不受其他测试的干扰。

XCTest 框架中,测试固件通过继承 XCTestCase 类而搭建的,而且需要提供两个方法:用于配置测试固件运行环境的 - setUp 方法和用于在测试运行之后清理运行环境的 -tearDown 方法。 XCTest 会在每个测试方法执行之前自动调用 -setUp 方法,以保证每个测试都会有自己的运行环境,同时也会在测试方法执行结束之后自动调用 -tearDown 方法进行清理。

测试方法的声明必须为无返回类型且无参数类型,并且方法名称要以小写的 test 开头。只有这样写的测试方法才能被 XCTest 框架发现。测试方法不需要在类的接口当中定义,因为 XCTest 是通过 Objective-C 语言的运行时库(runtime library)来查找测试方法的。

在测试方法中可以使用 XCTest 框架提供的很多宏,用来判断受测类是否符合测试条件。例如:XCTAssertNil 用来判断是否应该为空,XCTAssertThrows 用来判断是否应该抛出异常。这里宏都是以 XCT 开头的。

在写测试方法名称时应该尽量使用一个非常长的名字,因为它可以完整地揭示出方法的意图,便于阅读。

编写好测试用例之后,按下快捷键 Cmd + U,或者选择 Product 菜单下的 Test 菜单项,XCode 就会编译应用程序代码,然后就会在 iOS 模拟器中运行测试用例。

单元测试技巧

下面介绍编写测试用例的几种测试技巧。实例中的完整代码可以通过 GitHub下载查看。

}
```

其他技巧


本文为本人阅读《测试驱动的 iOS 开发》之后的摘抄和记录。

上一篇下一篇

猜你喜欢

热点阅读