翻译:使用Xcode测试(二)——测试基础(Testing Basics)

测试代码是用于检测你的应用程序和库代码,根据预期返回一个通过或失败结果。测试可能会检查某个对象在执行某些操作后实例变量的状态,验证你的代码在边界条件的情况下抛出的特定异常,等等。对于一个性能测试,参考标准可能是在最大的时间内完成你希望运行的程序。

定义测试范围

所有软件都是由组件构建,也就是说,小组件在一起形成大组件,高级别组件有更多的功能直到项目需求被满足。最佳测试实践是所有测试覆盖这个组件的所有层次功能。XCTest允许你为组件的任何层次编写测试代码。

它取决于你测试组件的哪一部分,它可以是一个类或一组完成基本目标的一组方法。例如,它可以是算术运算,如快速入门章节的计算器应用。可能有不同方法处理TableView内容和数据结构之间的交互。这些方法和运算每一个都意味着应用程序的功能组成部分,都可以测试。测试组件的行为完全是确定的,要么测试通过要么失败。

当你的项目在不断的增长和变化时,可以把应用行为划分为组件,可以更有效的测试你的代码行为是否符合所有细节的参考标准。对于有许多组件的大项目,你需要运行大量的测试来对项目进行彻底的测试。尽量设计测试可以快速运行,但不可避免有些测试很大并且执行的缓慢。小的快速运行的测试可以经常使用,当返回失败时有助于诊断和解决问题。

为项目组件设计测试时测试驱动开发的基础,在编写要测试的代码前先编写测试代码。这种开发方式让你在实现功能前考虑代码的要求和边界情况。在编写完测试代码后,你开发你的算法通过测试。在你的代码通过测试后,你对代码的改进有一个基础,在下次运行测试时,对预期行为的任何变化(这通常导致产品中的bug)都有信心。

即使你没有使用测试驱动开发,测试可以帮助你减少在代码中引入的bug,提高功能和性能。你可以在工作的应用中引入测试确保未来的变更不会修改应用现有行为。当你修复bug时,添加测试确认测试被修复。测试应该检查你的代码,覆盖所有的边界条件,查找预期失败或预期通过。

注意:添加测试到没有设计测试的项目中可能需要重新设计或重构部分代码使之更容易测试。附录A:编写可测试代码( Appendix A: Writing Testable Code)包含编写可测试代码的简单指南。

组件可以包含应用不同部分的交互。因为某些测试需要更长的时间允许,你可能希望定期或在某个服务器上运行测试。正如你在下一章中看到的,你可以组织你的测试并用许多不同的运行方式来满足不同需求。

性能测试

测试组件可以是功能测试或性能测试。XCTest提供API衡量时间性能,使你可以跟踪性能改进和回归测试。

为了让性能测试返回成功或失败,测试必须提供一个基准来评估。基准是十次运行测试方法与衡量标准偏差的平均时间。低于时间基准或多次运行相差太大均为失败。

注意:当你第一次运行性能测试时,XCTest总是会失败,是因为基准未知。一旦你设置特定的值为基准时,XCTest会评估并返回成功或失败,并为你提供测试结果的详情。

用户界面测试

到目前为止讨论的功能和性能测试通常被称为单元测试,其中单元是你决定测试功能的粒度和级别。单元测试主要关心组件是否是预期的行为,及与其他组件进行预期交互行为。从设计的角度来看,单元测试是从开发项目的内部审查满足你需求的组件。

用户通过用户界面与你的代码交互。用户界面的交互通常都是粗粒度更加高层次的行为,使用外部活动、集成的几个组件(子系统)来调用你的应用程序功能。没有专门为用户界面设计的组件,并在程序之外操作用户界面,很难编写单元测试用来检查用户界面的用户体验。这些特殊的组件叫做“UI测试”。

UI测试在应用外部测试应用,作为用户来体验它。让你可以编写测试并发送模拟事件给系统提供的和自定义的UI对象,捕获这些对象的响应,然后测试响应的正确性或想,就像你在单元测试中那样。

应用和库测试

Xcode提供两种类型的单元测试环境:应用测试和库测试

  • 应用测试。应用测试检查应用代码行为是否正确,例如计算器应用的算术运算。
  • 库测试。库测试检查动态库和不依赖于应用程序运行时使用的框架代码行为是否正确。使用库测试你可以构建单元测试检查库组件。

适当的使用这些环境测试你的项目,帮助你保持代码与预期的行为一致。

XCTest——Xcode测试框架

提供给你的测试框架是XCTest,从Xcode5开始。

关于版本和兼容性

  • 在Xcode5中,XCTest兼容运行于OS X v10.8和OS X v10.9及iOS7及更高版本。
  • 在Xcode6中,XCTest兼容运行于OS X v10.9和OS X v10.10及iOS6及更高版本。
  • 在Xcode7中,XCTest兼容运行于OS X v10.10和OS X v10.11及iOS6及更高版本。
  • UI测试支持运行于OS X v10.11和iOS9的设备和模拟器。

版本兼容性的更详细信息,参见Xcode版本说明( Xcode Release Notes)。

Xcode集成 XCTest.framework到你的项目。该框架提供设计测试并在代码上运行测试的API。XCTest框架的详细信息,参见XCTest 框架参考(XCTest Framework Reference)。

注意:Xcode包含OCUint测试更新项目迁移。关于OCUint迁移到XCTest的信息,参见附录B:从OCUnit迁移到XCTest( Appendix B: Transitioning from OCUnit to XCTest)。

何时开始测试

当你开始创建测试时,记住以下几点:

  • 在创建单元测试时,专注于测试代码的最基础功能,与controller交互model类和方法。
  • 应用的高层次代码如Model,View和Controller类,使用Cocoa和Cocoa Touch的程序员都熟悉该设计模式。当你编写测试覆盖所有的Model类,在编写Controller类测试代码前,要确认你的应用很好的测试过。从Controller开始会接触到应用更复杂的部分,例如,连接到网络,web服务连接的数据库。
  • 如果你正在编写一个框架或库,你可能希望从API开始,从这里,可以开始测试内部类。
  • 当创建UI测试,首先考虑最常见的工作流。思考用户开始使用app会做什么,以及在这个过程中用户希望立即看到什么UI。使用UI记录功能是捕获用户动作的最好方式,可以扩展UI测试方法实现测试准确性或性能。
  • 这种类型的UI测试相对来说是粗粒度的,可能会跨越几个子系统;他们可能返回很多信息,最初会很难分析。当你使用UI测试组件,你可以细化测试粒度并聚焦UI测试,更清楚的反映子系统行为。

官方原文地址:

https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/03-testing_basics.html#//apple_ref/doc/uid/TP40014132-CH3-SW1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容