[译]《Testing with Xcode》第一章——QuickStart

原文地址:https://developer.apple.com/library/prerelease/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/02-quick_start.html#//apple_ref/doc/uid/TP40014132-CH2-SW1

文章导读

本篇介绍了Xcode执行测试的方法,说明了Xcode工具如何新建、执行一个测试用例。

看完之后你能学习到:

  • 如何使用Xcode来创建一个测试用例。

  • 如何执行测试用例

  • 如何观察Xcode的测试结果

声明

文章翻译自Apple官方文档《Testing with Xcode》,不保证每个字都能翻译的精准,如有翻译错误,请留言指出,不胜感激。

QuickStart

这个快速开始是为了告诉你,你可以很容易的给你开发的软件做一些必须的测试。

介绍测试导航菜单

当你开始测试工作的时候,你经常会使用Xcode的导航功能。

测试导航菜单是工作区的一部分,是让你便捷的创建,管理,运行和检视测试代码。你可以点击在issue导航和debug导航中间的的图标进入测试导航菜单。当你的项目有定义测试套件,你可以在这里看到类似的导航菜单。

twx-qs-1_2x

测试导航菜单想一个项目一样以列表的形式分级的展示了包,类和方法。这个项目是一个类似计算器的app。计算器的工程项一套工程的结构,可以看到优先级最高的SampleCalcTests测试包,是为了测试应用的代码。


注意:Xcode只想的测试包会在测试导航菜单中展示。

如果你测试时使用数据,图片和其他内容,他们可以被添加到测试包,在执行的时候使用NSBundleAPIs。使用+[NSBundle bundleForClass:]和你的测试类时,你要确保你取回了正确的测试包和正确的数据。更多详情请看NSBundle Class Reference.

Xcode会计划和控制构建的内容。Schemes也会操作可执行的测试的方法进行测试。你可以在测试菜单中使用Control-clicking有选择的使用或者忽略测试包,类和方法。


在视图中活动的测试包是SampleCalcTests. SampleCalcTests,它包含该了一个测试包,测试包中包括9个测试方法。当你把鼠标放在列表中任意一项上,运行按钮就会出现在列表名称的右侧。测试结束后会返回成功或失败的结果给Xcode。测试开始执行的时候,这些图标会更新,给你展示测试的结果。绿色表示通过,红色表示失败。这里测试导航菜单显示的测试结果,有两项被断言为失败。

twx-qs-2_2x

点击列表中任意一个测试类或者测试方法,会在代码编辑器中打开对应的测试类。测试类和测试方法也会在编辑器中做上标记。测试失败会在代码编辑器中展示断言处和对应的方法。

在测试菜单的底部是增加按钮和过滤控制,你可以减少展示的内容,只显示活动的测试项或者只展示失败的测试,当然,你也可以按照名称来过滤。

更多测试导航菜单的详细操作,请看Test Navigator Help

为你的APP增加测试方法

在Xcode5和以后的版本中你可以在新建app,框架和资源的时候添加一个测试的target。当你开始一个新的项目时打开测试导航菜单,你可以看到一个测试包,一个测试类和一个测试方法的模板。但是你不要使用没有测试target的Xcode版本来打开以前的项目。这里的工作流程假设一个之前的项目是没有纳入测试的。

创建一个测试Target

点击测试导航菜单左下方的增加按钮来选择新建一个Unit Test Target

twx-qs-3_2x

在下一个对话框中选择OS X或者IOSUnit Testing Bundle,然后点击Next。会出现一个新的对话框,编辑项目名称和其他你需要的参数。

twx-qs-4_2x

点击Finish来增加你的target,在测试导航菜单师徒中包含了一个测试类的模板和两个测试方法的模板

运行测试和观察结果

现在你可以为你的项目增加测试方法了。你想要开发一些有用的测试方法。但是首先,先把鼠标放到测试导航菜单的SampleCalcTests上并点击运行按钮来执行所有的测试方法。测试结果会在函数名的旁边用绿色的标记标记出来,在代码编辑器中也一样。

twx-qs-6_2x

模板中的单元测试和演示的测试方法都是空的。这就是为什么他们都会被标记为成功,没有失败的断言。注意34行灰色菱形measureBlock:方法。点击菱形来展示演示结果的面板。

twx-qs-7_2x

面板允许你设置一个预期的基线和最大STDDEV参数。这些方面稍后会讨论。

编辑测试案例再次运行

由于这个样本项目是一个计算器APP,你想要检查他能否想其他计算函数一样正确的执行加减乘除。由于测试是在app项目内部构建,你可以增加所有你愿意增加的测试环境。创建测试要做的事就是在执行单元测试的文件中增加一个函数。

例如。你给SampleCalcTests.m文件增加一个#import和声明变量。

#import <XCTest/XCTest.h>

//

// Import the application specific header files

#import "CalcViewController.h"

#import "CalcAppDelegate.h"

 

@interface CalcTests : XCTestCase {

// add instance variables to the CalcTests class

@private

    NSApplication       *app;

    CalcAppDelegate     *appDelegate;

    CalcViewController  *calcViewController;

    NSView              *calcView;

}

@end

然后给测试方法一个描述的名称,就像testAddition一样,然后为方法增加一个执行的代码。

- (void) testAddition

{

   // obtain the app variables for test access

   app                  = [NSApplication sharedApplication];

   calcViewController   = (CalcViewController*)[[NSApplication sharedApplication] delegate];

   calcView             = calcViewController.view;

 

   // perform two addition tests

   [calcViewController press:[calcView viewWithTag: 6]];  // 6

   [calcViewController press:[calcView viewWithTag:13]];  // +

   [calcViewController press:[calcView viewWithTag: 2]];  // 2

   [calcViewController press:[calcView viewWithTag:12]];  // =

    XCTAssertEqualObjects([calcViewController.displayField stringValue], @"8", @"Part 1 failed.");

 

   [calcViewController press:[calcView viewWithTag:13]];  // +

   [calcViewController press:[calcView viewWithTag: 2]];  // 2

   [calcViewController press:[calcView viewWithTag:12]];  // =

    XCTAssertEqualObjects([calcViewController.displayField stringValue], @"10", @"Part 2 failed.");

}

注意测试导航菜单中样例的测试方法,testExample被替换成了testAddition

twx-qs-8_2x

现在点击测试导航菜单中的运行按钮(或者代码编辑器中的指示)来运行testAddition方法。

twx-qs-9_2x

就像你看到的一样,一个断言失败了,在测试导航菜单和代码编辑器中都高亮显示了。看源代码。Part 1成功了,是Part 2有一个问题。在测试中,错误很明显:在76行,[calcView viewWithTag:11]错了。应该是[calcView viewWithTag:12]。收集错误信息修复问题后,测试成功。

twx-qs-8a_2x

为普通的代码使用setUp()和tearDown()方法

Xcode为活动的测试包运行所有的测试方法一次。在这个小例子中只有一个方法执行了。它需要接受三个计算器app提供的变量对象。如果你写了四个或者五个测试方法在同样的类中。你会发现你需要为每一条测试案例输入重复的代码。XCTest框架提供你一个测试类的入口方法,setUptearDown,你可以用他们来放置每次执行测试方法的前置方法和结束方法。

使用setUptearDown方法很简单。从Mac_Calc_Tests.m文件中的testAddition代码中剪切4行// obtain the app variable for test access然后粘贴他们到模板默认的setUp入口方法中。

- (void)setUp

{

    [super setUp];

    // Put setup code here. This method is called before the invocation of each test method in the class.

 

   // obtain the app variables for test access

   app                  = [NSApplication sharedApplication];

   calcViewController   = (CalcViewController*)[[NSApplication sharedApplication] delegate];

   calcView             = calcViewController.view;

}

现在使用最少重复代码增加更多的测试方法——testSubtraction和其他方法。

twx-qs-10_2x

总结

你能看到的这个简短的快速开始,它非常简单的给项目增加测试。这里有一些需要注意的地方:

  • Xcode提供了大量基础的测试架构。当你为你的项目增加一个测试target时,Xcode会自动只想你的项目。会增加一个首字母为test的类,它含有一个单独的测试方法,并且可以在测试导航菜单中看到。
  • 测试导航菜单让你很容易的定位和编辑测试方法。你可以在测试导航菜单中直接运行测试方法,或者在打开的测试类中直接从代码编辑器中运行。当一个测试失败时,测试导航菜单和代码编辑器都会把失败的部分标记出来
  • 一个单独的测试方法可以包含该多个断言,结果只显示一个通过或者失败。这种方式允许你创建项目需要的简单或者复杂的测试。
  • setUp方法和tearDown方法作为入口方法,能够让你把常用的代码统一的使用在方法中,保持代码的连贯性也更容易发现问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 转:http://www.jianshu.com/p/d5fca0185e83 Xcode测试 前言 总算在今天把...
    测试小蚂蚁阅读 2,833评论 0 20
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 天,渐渐凉了 路边有几株桂花盛开 暗香浮动 一连数日 阴雨连绵 终于 等到晴天 江南如画 万水千山 只愿 一别两宽...
    安回声阅读 185评论 0 0
  • “喂,这电梯是去地下一层的。” “没关系啊,反正会再上来。” 他走进电梯,推着餐车的大叔往一旁挪了挪。 电梯门关。...
    颜锦茵阅读 91评论 0 0