2

我有一个应用程序,为此我使用 Objective Resource 创建本地对象以反映远程响应。

特定模型类有一个抽象类的子类,为它们提供各种附加功能,最重要的是能够序列化、写入磁盘和从磁盘加载,而不管该特定模型对象的特定属性是什么.

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 创建一个模拟对象来抽象地测试这个功能,因为我在很多项目中都使用了这个框架。

具体来说,我想构建测试,以确保可以保存加载、删除和覆盖具有各种类型属性的子类。

我的理解是,这就是存根和模拟的来源,但我似乎无法弄清楚如何模拟属性。我是否必须使用这些属性创建一个实际的类?

4

2 回答 2

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:)参数以使无法在模拟夹具中调用的方法静音是很有用的。

于 2012-11-22T15:01:21.307 回答
0

在这个位置有一些文档供您参考。基本上,Kiwi 提供了一个 Objective-C 类别NSObject,您可以在#import "Kiwi.h". 这允许所有继承自NSObject的对象响应+mock,mockWithName:等,这可以通过KWMock类进行配置。

希望这会有所帮助,抱歉有点晚了:)

于 2011-12-16T22:27:50.540 回答