gpt4 book ai didi

iphone - iOS 使用 Kiwi 测试具有属性的模拟子类

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:11 26 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

属性是幕后的方法,所以:

我设法结合 @aopsfan 提到的 +mock 方法,然后使用 -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:)参数可以使无法在模拟夹具中调用的方法静音。

关于iphone - iOS 使用 Kiwi 测试具有属性的模拟子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7845021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com