XCTest-3-测试基础

测试基础

测试是你编写的代码,用于执行你的应用程序和代码库里面的代码,并生成通过或失败的结果,根据一组预期进行衡量。

测试可以在执行一些操作之后检查对象的实例变量的状态,验证代码在遇到边界条件时抛出特殊异常,等等。对于性能测量测试,参考标准可以是期望一组例程运行到完成的最大时间量。

定义测试范围

所有软件使用组合构建; 也就是说,较小的组件被一起布置以形成具有更大功能的更大,更高级别的组件,直到满足项目的目标和要求。良好的测试实践是具有涵盖该组合物的所有水平的功能的测试。XCTest允许您为任何级别的组件编写测试。

它是由你来定义什么构成一个组件的测试 - 它可以是一个方法在一个类或一组方法,完成一个基本的目的。例如,它可以是一个算术运算,如在快速入门一章中用作计算器应用程序的示例。它可以是处理a的内容UITableView和您在代码的数据结构中维护的名称列表之间的交互的不同方法。这些方法和操作中的每一个意味着应用程序功能的一个组件和一个检查它的测试。用于测试的组件的行为应该是完全确定的; 测试通过或失败。

您可以将应用程序的行为划分为组件越多,您可以更有效地测试代码的行为是否满足您的项目增长和更改的所有细节中的参考标准。对于具有许多组件的大型项目,您需要运行大量测试来彻底测试项目。测试应该设计为尽可能快地运行,但是一些测试必然很大并且执行得更慢。小型,快速运行的测试可以经常运行,并且当有故障时使用,以帮助诊断和解决问题容易。

为项目组件设计的测试是测试驱动开发的基础,这是一种写代码的风格,在写代码之前编写测试逻辑。这种开发方法允许您在实现代码之前为代码编写需求和边缘情况。在编写测试后,您将开发您的算法,目的是通过测试。在您的代码通过测试后,您有一个基础,您可以对您的代码进行改进,有信心在下次运行测试时识别对预期行为的任何更改(这将导致产品中的错误)。

即使您不使用测试驱动开发,测试也可以帮助您减少代码中的错误引入,同时修改它以增强功能和功能。您可以在工作应用程式中加入测试,确保未来的变更不会以您计划的方式修改应用程式现有的行为。当您修复错误时,您添加测试,确认错误是固定的。测试应该行使你的代码,寻找预期的成功和预期的失败,以涵盖所有的边界条件。

注意:将测试添加到非设计时考虑测试的项目可能需要重新设计或重构代码的一部分,以便于测试。

附录A:编写可测试代码包含编写可测试代码的
简单指南,您可能会发现它们有用。

组件可以包含应用程序各个部分之间的互动。由于某些类型的测试需要更长时间才能运行,因此您可能只希望定期运行它们或仅在服务器上运行它们。正如你将在下面的章节中看到的,你可以组织你的测试,并以许多不同的方式运行它们来满足不同的需求。

性能测试

组件的测试本质上可以是功能性的或测量性能。XCTest提供API来测量基于时间的性能,使您能够以类似于功能合规性和回归的方式跟踪性能改进和回归。

为了在测量性能时提供成功或失败结果,测试必须具有要评估的基线。基线是测试方法的十次运行中的平均时间性能与每次运行的标准偏差的测量的组合。低于时间基线或从运行到运行变化太大的测试报告为故障。

注意 第一次运行性能测量测试时,XCTest总是报告失败,因为基线未知。一旦您接受某个测量作为基线,XCTest将评估并报告成功或失败,并为您提供详细查看测试结果的方法。

用户界面测试

到目前为止讨论的功能和性能测试通常被称为单元测试,其中“单元”是您已经根据粒度和级别决定的功能的组件。单元测试主要涉及形成好的组件,其行为与预期的一样,并且如预期地与其他组件交互。从设计的角度来看,单元测试从内部接近您的开发项目,检查组件是否满足您的意图。

用户通过用户界面与这些内部代码交互。用户界面交互通常是粗糙的,更高级别的行为,采取外部活动和集成几个组件(子系统)的操作来调用您的应用程序的功能。很难编写单元测试来实现用户通过用户界面体验到的交互,而没有设计用于从应用程序上下文外部操作UI的特殊设施。用这些特殊设施写的测试称为“UI测试”。

UI测试方法从外部表面测试应用程序,用户体验它。它们使您能够编写测试,将模拟事件发送到系统提供的和自定义UI对象,捕获这些对象的响应,然后测试该响应的正确性或性能,就像使用内部导向的单元测试一样。

应用和库测试

Xcode提供两种类型的单元测试上下文:应用测试和库测试。

应用测试。应用程序测试检查应用程序中代码的正确行为,例如计算器应用程序的算术运算示例。

库测试。库测试检查动态库和框架中的代码的正确行为,而与在应用程序的运行时中的使用无关。使用库测试,您构建单元测试,运用库的组件。

使用这些测试上下文来测试项目有助于在代码随着时间演变时保持预期和预期的行为。

XCTest - Xcode测试框架

XCTest是为您提供的测试框架,从Xcode 5开始。

关于版本和兼容性:

在Xcode 5中,XCTest与在OS X v10.8和OS X v10.9上运行以及与iOS 7和更高版本兼容。

在Xcode 6中,XCTest与在OS X v10.9和OS X v10.10上运行,以及与iOS 6和更高版本兼容。

在Xcode 7中,XCTest与在OS X v10.10和OS X v10.11上运行以及与iOS 6和更高版本兼容。

支持在OS X v10.11和iOS 9上运行UI测试,无论是在Simulator和设备上。

有关更多详细的版本兼容性信息,请参阅Xcode发行说明

Xcode XCTest.framework融入您的项目。此框架提供了API,让您设计测试并在代码上运行它们。有关XCTest框架的详细信息,请参阅XCTest框架参考

注意: 有关将OCUnit迁移到XCTest的信息,请参阅附录B:从OCUnit转换到XCTest

测试时从哪里开始

当您开始创建测试时,请记住以下想法:

当创建单元测试时,专注于测试代码的最基本的基础,Model类和方法,它们与Controller交互。

您的应用程序的高级框图很可能有Model,View和Controller类 - 这是一个熟悉的设计模式,任何人谁一直在使用Cocoa和Cocoa Touch。当你编写测试来覆盖所有的Model类时,你将有确定的知道你的应用程序的基础是经过良好的测试,然后你的方式来编写Controller类的测试 - 开始接触其他更复杂部分应用程序,例如,连接到网络与连接在Web服务后面的数据库。

作为一个替代的起点,如果你正在创作一个框架或库,你可能想从你的API的表面开始。从那里,你可以工作你的方式在内部类。

在创建UI测试时,首先考虑最常见的工作流程。想想当用户开始使用应用程序和在该过程中立即执行什么UI时,用户做什么。使用UI记录特征是将用户动作序列捕获到UI测试方法中的好方法,该UI测试方法可以被扩展以实现正确性和/或性能的测试。

这种类型的UI测试倾向于以相对粗粒度的焦点开始,并且可能跨越几个子系统; 它们可以返回很多可能很难分析的信息。当您使用UI测试套件时,您可以细化测试粒度和聚焦UI测试,以更清晰地反映特定子系统的行为。

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

推荐阅读更多精彩内容