我有一个应用程序,我使用Objective Resource创建本地对象以反映远程响应。
特定的模型类具有一个abstract-ish类的子类,为它们提供了各种附加功能,最重要的是能够序列化,写入磁盘和从磁盘加载,无论具体属性是什么特定的模型对象。
superclass.m
-(BOOL)saveToDisk{
...serializes and encodes all properties to disk
...return success
}
subclass.h : superclass
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSArray* friends;
...etc
然后我会打电话给
instanceOfSubclass.name = "joe"
NSLog(@"save status = %d",[instanceOfSubclass saveToDisk]);
我是BDD的新手,通常是测试驱动的开发。如何使用kiwi创建一个模拟对象来抽象地测试这个功能,因为我在很多项目中使用这个框架。
具体来说,我想构建测试,以确保可以保存加载,删除和覆盖具有各种类型属性的子类。
我的理解是,这是存根和模拟进入的地方,但我似乎无法弄清楚如何模拟属性。我是否必须创建具有这些属性的实际类?
答案 0 :(得分:1)
属性是幕后的方法,所以:
我设法使用+mock
提到的@aopsfan
方法的组合,然后使用-stub:andReturn:
我猜测了实现属性的方法的名称。此示例有效,冒充TCConnection(来自Twilio iOS SDK):
// Instantiates a mocked object:
id fake_connection = [TCConnection mock];
// Creates a faked property accessor:
[fake_connection stub:@selector(parameters)
andReturn:@{@"From": @"fake-caller"}];
// I could now call my TCDeviceDelegate 's
// -device:didReceiveIncomingConnection:
[myActualObject device:myActualObject.device
didReceiveIncomingConnection:fake_connection];
// Check some results on the object:
[[myActualObject.connection should] equal:fake_connection];
这种模式特定的例子可能会推广到其他情况。调用-stub
(没有andReturn:
)参数来静音无法在模拟夹具中调用的方法很有用。
答案 1 :(得分:0)
this location为您提供了一些文档。基本上,Kiwi在NSObject
上提供了您#import "Kiwi.h"
时可以访问的Objective-C类别。这允许从NSObject
继承的所有对象都响应+mock
,mockWithName:
等,这可以通过KWMock
类进行配置。
希望这会有所帮助,对不起有点迟了:)