2019独角兽企业重金招聘Python工程师标准>>>

所谓单元测试(又称为模块测试, Unit Testing)就是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。

其实在我们开发的程序实现某个功能的时候我们也有进行测试。只不过,你是在项目代码中直接写的方法,而且在测试的时候,也是点点点,点到相应的界面才触发相应的方法,进行测试,这测试效率,想想也是醉了,不过还好能正常测试,但是如果你想控制不同的输入参数呢?好,你说直接写入到程序。但是,你测试完成了之后呢?好,你说那就注释掉啊。但是,如果后面你改动了又需要再测试一此呢?其实,说了这么多,就是想说,在你的有效工程代码外写测试代码,这就是单元测试了,完成后,一个Command+U直接进入入口进行代码测试。

接下来就是怎么进行代码测试,这个网络一搜一大堆,但是都是在那个test.m文件里面直接写写写得节奏,看了你肯定会问,就在这里写一些判断1+1=?2的代码?这什么情况。其实不是这样子的。按照目前Xcode的版本创建是这样子的:

1、直接创建项目,默认就已经有了那个所谓的TestOCUnitTestTests.m文件,创建完成之后如下,你直接看到了一个TestOCUnitTestTests.m文件,那个就是放测试代码的文件了。

2、点击你平时运行项目的那个三角形右边的TestOCUnitTest可以看到新出来三个选项,new一个Scheme,然后把项目切换到TestOCUnitTestTests里面,按住Command+U,会弹出一个Test Succeeded的提示框,表示成功。

3、接下来说说怎么测试我们项目里面的某个类的方法,我们随便在自己的某个类新建一个方法,我就选在MasterViewController这个类里面好了。具体实现的方法是在接收到的字符串用[]包住,然后返回,代码如下:

- (NSString *)getTestString:(NSString *)normalStr{return [NSString stringWithFormat:@"[%@]",normalStr];
}

记得声明成外部可调用方法!

4、在TestOCUnitTestTests.m文件里面调用这个方法:

- (void)testExample {//1、找一个你需要进行单元测试的类,实例化MasterViewController *controller = [[MasterViewController alloc]init];NSString *normalStr = @"Objective-C";NSString *expectStr = @"[Objective-C]";//2、调用该对象需要进行单元测试的方法NSString *returnStr = [controller getTestString:normalStr];//3、断言你预想中得返回值及实际返回值是否符合NSLog(@"Is MasterViewController testStr getRightStr:");XCTAssertEqualObjects(expectStr,returnStr, @"pass");
}

可以运行之后,可以看到方法左边打了个钩钩,说明测试是通过的。(PS:写在TestOCUnitTestTests.m里面的所有方法会默认执行,不用你手工去调用)

如果你测试的是你项目中的其他方法,那么直接在在TestOCUnitTestTests.m里面直接创建测试方法,传参后断言测试返回数据是否跟预期的一样就行了,以上就是单元测试的使用。

对于一些常用的断言测试函数,我直接拷贝过来好了,如下所示:

XCTFail(format…) 生成一个失败的测试;

XCTAssertNil(a1, format...)为空判断,a1为空时通过,反之不通过;

XCTAssertNotNil(a1, format…)不为空判断,a1不为空时通过,反之不通过;

XCTAssert(expression, format...)当expression求值为TRUE时通过;

XCTAssertTrue(expression, format...)当expression求值为TRUE时通过;

XCTAssertFalse(expression, format...)当expression求值为False时通过;

XCTAssertEqualObjects(a1, a2, format...)判断相等,[a1 isEqual:a2]值为TRUE时通过,其中一个不为空时,不通过;

XCTAssertNotEqualObjects(a1, a2, format...)判断不等,[a1 isEqual:a2]值为False时通过;

XCTAssertEqual(a1, a2, format...)判断相等(当a1和a2是 C语言标量、结构体或联合体时使用, 判断的是变量的地址,如果地址相同则返回TRUE,否则返回NO);

XCTAssertNotEqual(a1, a2, format...)判断不等(当a1和a2是 C语言标量、结构体或联合体时使用);

XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判断相等,(double或float类型)提供一个误差范围,当在误差范围(+/-accuracy)以内相等时通过测试;

XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判断不等,(double或float类型)提供一个误差范围,当在误差范围以内不等时通过测试;

XCTAssertThrows(expression, format...)异常测试,当expression发生异常时通过;反之不通过;(很变态) XCTAssertThrowsSpecific(expression, specificException, format...) 异常测试,当expression发生specificException异常时通过;反之发生其他异常或不发生异常均不通过;

XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression发生具体异常、具体异常名称的异常时通过测试,反之不通过;

XCTAssertNoThrow(expression, format…)异常测试,当expression没有发生异常时通过测试;

XCTAssertNoThrowSpecific(expression, specificException, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过;

XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过

转载于:https://my.oschina.net/caijunrong/blog/492932

iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)相关推荐

  1. iOS 开发中,单款应用程序的最大可用内存是多少?

    9 个回答 7赞同 反对,不会显示你的姓名 张光宇,none snow.dingc.孔庆立 等人赞同 如果你想让用户 在尽量多的iOS设备上得到比较稳定的体验, 实用过程中不Crash, 不因为GC而 ...

  2. IOS开发——01_第一个OC程序

    本文目录 一.新建Xcode项目 二.运行项目 注:建议先学习C语言, 如果你还没有编程经验,看不懂的地方可以在评论区提出,本文使用的为Xcode6.1版本,与之前版本会有所差异,但总体不变. 另:还 ...

  3. IOS开发(104)之程序执行状态更改

    1 前言 上节我们介绍了程序执行的状态,从例子中我们可以发现处理这些状态更改的时候有明确的策略可以遵循,这次我们就来介绍一下. 2 详述 2.1 活动->不活动 使用applicationWil ...

  4. iOS开发——常见BUG——window决定程序的状态栏管理问题

    Xcode7升级之后遇到的问题 问题一: 老项目在Xcode6上运行没有任何问题,但在Xcode7上运行直接崩了! 经过一波分析: 发现是因为我顶部状态栏处添加了topWindow,用于处理Table ...

  5. [iOS]关于零基础学习iOS开发的学习方法总结

    关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...

  6. iOS开发笔记 - 网络篇

    计算机网络基础   计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享.   如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物. ...

  7. 【转】iOS 开发怎么入门?

    原文网址:http://www.zhihu.com/question/20264108 iOS 开发怎么入门? 请问有设计模式.内存管理方面的资料吗?最好有除了官方文档之外的其它内容, 10 条评论 ...

  8. iOS 开发代码规范

    前言: 最近新接手一个项目,代码无论是从基础的代码规范还是设计模式上来说,几乎没有任何规范性可言,都是自由奔放,随心所欲的写. 为了给团队整理一份iOS代码,自己先写一个版本. 一.规范制定说明 1. ...

  9. 苹果禁止使用热更新 iOS开发程序员新转机来临

    今天本是女神们的节日,所有iOS程序员沸腾了!原因是苹果爸爸发狠了,部分iOS开发者收到了苹果的这封警告邮件: [图一 苹果邮件] 消息一出,一时间众多开发者众说纷纭,以下是来源于网络的各种看法: 有 ...

最新文章

  1. 【Java】StopWatch任务执行时间监视器
  2. Design Pattern in Java[Challenge 2.1]
  3. 【机器学习】机器学习实践中的 7 种常见错误
  4. SQL优化:紧急情况下提高SQL性能竟是这样实现的!(文中有惊喜)
  5. 【抄】更改eclipse配置
  6. 归并排序(递归实现+非递归实现+自然合并排序)
  7. java发送163邮件
  8. IT编程从零开始学入门到精通需要多久
  9. 电路串联和并联图解_电路串联和并联的区别有哪些
  10. 【机器学习项目实战】随机森林(random forest)回归(RandomForestRegressor)模型Python实现
  11. C++ | isupper函数用法
  12. 计算机如何更新目录,wps更新目录【设置办法】
  13. java爬虫入门第二弹——通过URL下载图片(以下载百度logo为例)
  14. 小程序开发华为P20、voiv下Echarts图表不显示数据、坐标轴等问题
  15. 【夜读】一个人保持年轻的5个好习惯
  16. Lumen rule
  17. [译] 现代浏览器内部揭秘(第一部分)
  18. Machine Learning Algorithms Study Notes
  19. 吴英雷 php,2015年01月05日php就业班(第34期)(老888师)
  20. GameBoy系列(一):基本参数

热门文章

  1. 设计模式のObserver Pattern(观察者模式)----行为模式
  2. e课表项目第二次冲刺周期第七天
  3. 使用ajax进行汽车详情表的查询
  4. 推送:腾迅信鸽 VS Bmob
  5. 如何删除git远程分支
  6. IOS开发之--UIScrollView pagingEnabled自定义翻页宽度
  7. hdu 4640(状压dp)
  8. 【转】python 和 cx_Oracle 的使用
  9. jquery插件---自动补全类插件
  10. 让我感动的经典台词(zz)