iOS进行单元测试OCUnit+xctool
来源:互联网 发布:张艺谋李安知乎 编辑:程序博客网 时间:2024/06/09 23:17
感谢原作者 原文出处: http://iiiyu.com/2013/05/23/learning-ios-notes-twenty-three/
单元测试
什么是单元测试
wiki解释
简单说来就是为你的方法多专门写一个测试函数。以保证你的方法在不停的修改开发中。保持正确。如果出错,第一时间让你知道,这样从最小单位开始监控来保证软件的质量。
我为什么要单元测试
其实要开始写单元测试的原因是,由于我的原因格志的存储逻辑一直有问题。 一个是代码写的比较搓,一个是修改存储的逻辑的话。影响面比较大。可能修复了一个bug而引入了未知的多个bug。为了Sumi早日达到国际化大厂的标准。决定上单元测试于格志。其实最根本的目的还是想要项目变的更加可靠。
单元测试的一般方法
关于测试的书,一搜就一大把。都有高深的理论和方法来指导怎么写单元测试的方法。我觉得嘛不用搞了这么复杂。 无非就3种时候会去想写测试:
- 代码完成以后
- 开始写代码之前
- 修复了一个bug以后
第一种是完成了代码,恩我要测试一下我写的这些方法可靠不可靠。那这时候可以写测试。
第二种一个著名的方法论TDD。主要思想就是在写代码之前,就全部设计好借口。函数名字什么的。然后在写能通过测试的函数。
第三种就是发现了bug,我修复了这个bug。为了确保修复是成功的。那就写个测试吧。
我觉得啊,着三种都没有什么好或差。能写测试的少年都是好少年。何必这么在意什么时候去写呢。
一个完整的测试类组成像下图
在一开始可能测试方法里面需要一些上下文环境。这些可以在Setup里面去完成。然后才可是执行自己写的测试方法。 然后测试结束以后,可能产生了一些垃圾数据文件什么的。这时候你可以在TearDown方法里面把他们处理掉。
以上大部分都是我自己的粗浅理解,如果你需要更多关于单元测试请阅读更加系统专业的书籍。
OCUnit
OCUnit是xCode里面自己带的单元测试框架。不必安装第三方的其他库就可以使用。最简单的就是创建项目的时候你把单元测试的那个勾点上。xCode就会自动的为你加入一个单元测试的target。快捷键Command + U。就可以运行测试。最喜欢这样方便又好用的东西了。当然运行OCUnit的测试输出的内容实在惨不忍睹。
创建一个OCUnit的Unit Test
新项目使用OCUnit
选上Unit Test
会自动的建立一个Target
自动的为你添加好需要的类库
为你添加一个Unit Test的类
看一眼Scheme 只有一个。
看看Scheme里面是怎么写的。
用Command + U运行一下测试看看结果。这是没有通过的。因为自动生成的模板就是不通过的。具体一会儿分析代码。
看看终端的输出。渣一般的难看。根本无法高识别度的分清。
已经存在的项目使用OCUnit
这是一个一开始没有选择过Unit Test的项目
点击增加Target
选择Unit testing Bundle
为我们的测试bundle取一个名字
我们可以看到Scehme多出来了一个。这时候如果选择的是App的Scehme。Command + U。是没有运行测试的。要选择我们新建立的Test Scehme。再按Command + U.就运行了测试了。
如何为App的Scehme添加Test。使得不用切换Scehme,就可以运行Unit Test。
然后选择你建立的Unit Test bundle。 打完收工。
OCUnit使用的宏
STAssertEqualObjects(a1, a2, description, …)
STAssertEquals(a1, a2, description, …)
STAssertEqualsWithAccuracy(a1, a2, accuracy,description, …)
STFail(description, …)
STAssertNil(a1, description, …)
STAssertNotNil(a1, description, …)
STAssertTrue(expr, description, …)
STAssertTrueNoThrow(expr, description, …)
STAssertFalse(expr, description, …)
STAssertFalseNoThrow(expr, description, …)
STAssertThrows(expr, description, …)
STAssertThrowsSpecific(expr, specificException, description, …)
STAssertThrowsSpecificNamed(expr, specificException, aName, description, …)
STAssertNoThrow(expr, description, …)
STAssertNoThrowSpecific(expr, specificException, description, …)
STAssertNoThrowSpecificNamed(expr, specificException, aName, description, …)
比较经常使用的宏
STAssertTrue(expr, description, …)
STAssertFalse(expr, description, …)
STAssertNil(a1, description, …)
STAssertNotNil(a1, description, …)
STAssertEqualObjects(a1, a2, description, …)
STAssertEquals(a1, a2, description, …)
STFail(description, …)
STAssertThrows(expr, description, …)
写了几个测试方法的例子
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
- (void)testOne {NSString *string1 = @"test";NSString *string2 = @"test";STAssertThrows([string1 isEqualToString:string2], @"FAILURE");}- (void)testTwo{int i = 0;int j = 1;STAssertTrue(i < j, @" i: %d, j: %d", i,j);}- (void)testThree{NSString *oneStr = @"hello";NSString *twoStr = @"world";STAssertFalse([oneStr isEqualToString:twoStr], @"oneStr:%@, twoStr:%@", oneStr, twoStr);}- (void)testFour{NSArray *array = nil;STAssertNil(array, @"array:%@", array);}- (void)testFive{NSDictionary *dict = @{@"hello": @"word"};STAssertNotNil(dict, @"dict:%@", dict);}- (void)testSix{NSNumber *oneNum = @100;NSNumber *twoNum = @200;STAssertEqualObjects(oneNum, twoNum, @"oneNum:%@ twoNum:%@",oneNum, twoNum);}- (void)testSeven{NSArray *oneArray = @[@11, @22, @33];NSArray *twoArray = [oneArray copy];STAssertEqualObjects(oneArray, twoArray, @"oneArray:%@, twoArray:%@", oneArray, twoArray);}- (void)testEight{NSUInteger uint_1 = 4;NSUInteger uint_2 = 4;STAssertEquals(uint_1, uint_2, @"FAILURE");}- (void)testExample{STFail(@"Unit tests are not implemented yet in HelloAfterAddOCUnitUnitTest");}
一会儿用xctool跑个华丽丽的出来看。
xctool
xctool是什么
xctool是Facebook开源的一个命令行工具,用来替代苹果的xcodebuild工具。
github
官方演示
你可以用它来Build你的App。跑Tests。而且它跑Test输出是华丽丽的彩色。比xCode自带的不知好看多少倍。OCUnit本来被吐槽无数,遇上了xctool以后就逆袭了啊。
世界上最最牛的SNS出品,肯定不会坑爹啊。
安装xctool
最方便 最推荐的是用Homebrew。如果你的Mac里面没有安装Homebrew我觉得是你的损失。
12
brew updatebrew install xctool
使用xctool来跑OCUnit测试
关于如何使用xctool,你去看官方文档肯定要比我结束好的多。 我就是过来跑测试的例子给你看而已。
测试一
1
xctool -project HelloOCUnit.xcodeproj -scheme HelloOCUnit test
测试二
123
xctool -project HelloAfterAddOCUnit.xcodeproj -scheme HelloAfterAddOCUnit testxctool -project HelloAfterAddOCUnit.xcodeproj -scheme HelloAfterAddOCUnitUnitTest test
项目一下载
项目二下载
总结
以上就是OCUnit的使用建议。建议OCunit+xctool。来进行你的单元测试构建。更多信息请阅读相关资料。我这里只是写了入门而已。接下来的测试之路就靠你了
- iOS进行单元测试OCUnit+xctool
- iOS进行单元测试OCUnit+xctool
- iOS进行单元测试OCUnit+xctool
- iOS进行单元测试OCUnit+xctool - yingkong1987
- 单元测试OCUnit+xctool
- 单元测试OCUnit+xctool
- iOS开发中使用OCUnit进行单元测试
- iOS单元测试——OCUnit, GHUnit
- ios的单元测试OCUnit以及更新了之后的XCTestCase
- iOS 自动集成单元测试 - Jenkins与xctool整合
- 单元测试之OCUnit
- XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit。通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能。本文将演示如何在
- 单元测试应用指南(GTest,CPPUnit, OCUnit)
- 使用OCUnit写单元测试---逻辑测试
- xctool
- OCMock进行iOS单元测试实践
- iOS --- 使用XCTest进行单元测试
- iOS开发那些事--OCUnit测试框架
- oracle 11g不能导出空表的解决方法
- (转载)墨菲定律、二八法则、马太效应、手表定理、“不值得”定律、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原理、钱的问题、奥卡姆剃刀等13条是左右人生的金科玉律
- 解决jsp获取session域中的值之字符串拼接的问题
- Oracle 用户常用信息查询与设定
- iOS 判断网络类型(3G,4G,Wi-Fi)
- iOS进行单元测试OCUnit+xctool
- Xcode 6 技巧: 矢量图像,代码片段以及其他
- SQL error 1403:ogg 同步
- 23种设计模式之【前篇】
- keil5以上版本开发stm32不需要定义STM32F10X_HD,USE_STDPERIPH_DRIVER
- 打开模态视图 导航
- 使用OMD5查询MRP元素描述
- 数学之美---平凡而又神奇的贝叶斯方法
- IOS数组按中文关键字以字母序排序