iOS 单元测试OCMock介绍
来源:互联网 发布:北大青鸟计算机二级vb 编辑:程序博客网 时间:2024/05/22 22:58
OCMock总结
使用OCMock是为了某些不容易构造或者不用一获取的对象,用一个虚拟的对象来创建以便测试。在cocoa编程测试使用系统自带的ocunit,或者第三方的ghunit都没有mock,一般使用oc mock和ghunit的组合来搭建测试框架来测试。
mock基本的用法有从class初始化mock对象,
id mock = [OCMockObject mockForClass:[SomeClass class]]
初始化mock对象之后可以使用expect 和verify组合来进行验证。
[[mock expect] someMethod:someArgument]
中间调用其他代码会调用someMethod
[mock verify]
expect 也可以验证返回值,例如
[[[mock expect] andReturn:@"Objective-C"] lowercaseString];
stub 构造接口返回信息,但不验证,expect和stub在实现上的区别是,在mockobject上有个expectations数组,expect后会把stub后的对象加到该数组,verify时候对expectations数组验证。
[[[mock stub] andReturn:aValue] someMethod:someArgument]
告诉mock对象当someMethod调用时候,应该返回aValue
也可以抛出异常
[[[mock stub] andThrow:anException] someMethod:someArgument]
或者发送消息
[[[mock stub] andPost:aNotification] someMethod:someArgument]
或者委托另外一个对象
[[[mock stub] andCall:@selector(aMethod:) onObject:anObject] someMethod:someArgument]
可以使用and Return, and Throw, and Post, and call onObject 组合使用
除了从class得到mock对象,还能从protocol得到,
id aMock = [OCMockObject mockForProtocol:@protocol(SomeProtocol)]
另外有一种Partial mocks
id aMock = [OCMockObject partialMockForObject:anObject]
当方法没有使用stub之后被调用之后,会被返回到anObject,当一个stub的方法被调用时候使用anObject的引用。
当mock object的一个方法没有expect或者stub之后被调用会产生一个异常,而如果使用niceMock来初始化被忽略。
id mock = [OCMockObject niceMockForClass:[SomeClass class]]
可以不允许指定的方法:
[[mock reject] someMethod]
OCMock 文档:http://ocmock.org/
mock基本的用法有从class初始化mock对象,
id mock = [OCMockObject mockForClass:[SomeClass class]]
初始化mock对象之后可以使用expect 和verify组合来进行验证。
[[mock expect] someMethod:someArgument]
中间调用其他代码会调用someMethod
[mock verify]
expect 也可以验证返回值,例如
[[[mock expect] andReturn:@"Objective-C"] lowercaseString];
stub 构造接口返回信息,但不验证,expect和stub在实现上的区别是,在mockobject上有个expectations数组,expect后会把stub后的对象加到该数组,verify时候对expectations数组验证。
[[[mock stub] andReturn:aValue] someMethod:someArgument]
告诉mock对象当someMethod调用时候,应该返回aValue
也可以抛出异常
[[[mock stub] andThrow:anException] someMethod:someArgument]
或者发送消息
[[[mock stub] andPost:aNotification] someMethod:someArgument]
或者委托另外一个对象
[[[mock stub] andCall:@selector(aMethod:) onObject:anObject] someMethod:someArgument]
可以使用and Return, and Throw, and Post, and call onObject 组合使用
除了从class得到mock对象,还能从protocol得到,
id aMock = [OCMockObject mockForProtocol:@protocol(SomeProtocol)]
另外有一种Partial mocks
id aMock = [OCMockObject partialMockForObject:anObject]
当方法没有使用stub之后被调用之后,会被返回到anObject,当一个stub的方法被调用时候使用anObject的引用。
当mock object的一个方法没有expect或者stub之后被调用会产生一个异常,而如果使用niceMock来初始化被忽略。
id mock = [OCMockObject niceMockForClass:[SomeClass class]]
可以不允许指定的方法:
[[mock reject] someMethod]
OCMock 文档:http://ocmock.org/
GHUnit 总结
相比自带的ocunit,GHUnit可以兼容ocunit的语法,并提供了异步测试的方法。测试target是一个独立的app,可以加断点和可以在真机上运行。
使用GHAsyncTestCase 异步测试
例如
- (void)testThatDelegateCanOverrideActionSheetDisplay {
self.actionBar.delegate = self;
[self prepare];
[self.actionBar shareButtonTouched:nil];
[self waitForStatus:kGHUnitWaitStatusSuccess timeout:1.0];
}
- (void)actionBar:(SocializeActionBar *)actionBar wantsDisplayActionSheet:(UIActionSheet *)actionSheet {
// GHAssertEquals(actionSheet, self.mockShareActionSheet, @"Bad action sheet");
[self notify:kGHUnitWaitStatusSuccess];
}
先调用prepare,调用方法后,再等待 kGHUnitWaitStatusSuccess消息。自己实现了actionBar: wantsDisplayActionSheet:的delegate方法,发送 kGHUnitWaitStatusSuccess。
GHUnit文档:https://github.com/gabriel/gh-unit
Kif 总结
kif ,”keep it functional”,可以让iOS通过在模拟器上模拟用户交互行为的方式来做集成测试。
模拟用户的行为包括,输入文字,点击等等,验证方式可以使用是否跳转到指定View等。
使用方式是先把原来的target复制一份,引入库文件,修改一下配置,加入集成测试代码。测试代码一般需要三个部分,继承自KIFTestController的类,扩展KIFTestScenario的方法,指定要执行哪些step,每个step调用KifTestStep,自己扩展KifTestStep来实现每个step的具体操作。
Kif文档:https://github.com/square/KIF
另一个测试框架 Kiwi
Kiwi类似于系统自带的ocunit,在系统自带的test的target里添加测试用例。
与ocunit相比,除了语法区别之外,还可以使用mock对象,可以异步方法来测试。
不过对比GHUnit,异步测试的方法不够好用。
1 0
- iOS 单元测试OCMock介绍
- OCMock进行iOS单元测试实践
- Cocoapods + GHUnit + OCMock 实现iOS单元测试
- iOS单元测试:Specta + Expecta + OCMock + OHHTTPStubs + KIF
- IOS学习 使用OCMock单元测试(一)安装
- iOS 单元测试2- OCMock常见使用方式
- [iOS单元测试系列]-译-OCMock常见使用方式
- iOS单元测试GHUnit + OCMock(不使用cocoapods版)
- iOS单元测试GHUnit + OCMock(使用cocoapods版)
- [iOS单元测试系列]-译-OCMock常见使用方式
- 利用OCMock写单元测试
- OCMock单元测试部分知识点整理
- 【OCMock】使用介绍分析
- IOS Unit Testing With OCMock
- iOS测试-OCMock和GHUnit
- OCMock在iOS项目中配置指南
- iOS测试-(二)OCMock和GHUnit
- XCode7下配置OCMock(针对iOS)
- linux 知识点
- 1
- shell基础语法
- pthread_once 和 pthread_key_t
- 解决Scrapy性能问题——案例二(含有阻塞的代码)
- iOS 单元测试OCMock介绍
- 控件PopupWindow的使用
- hbase shell基础和常用命令详解
- [LintCode] 逆序对 Reverse Pairs
- Servlet实现文件上传,可多文件上传
- Java String.split()用法小结
- Android studio中获取SHA1码及MD5码
- 项目后端知识点总结1
- Java基础随笔之枚举的前世今生