gpt4 book ai didi

ios - OCMock:在本地声明的对象上模拟方法

转载 作者:行者123 更新时间:2023-11-29 12:48:24 26 4
gpt4 key购买 nike

我一直在使用 OCMock 创建 stub 和模拟。不过,我正在努力模拟本地声明的对象方法。

如果我有下面的代码:

// Example.m 
#import "Object.h"

- (NSString *) methodWithLocallyDeclaredObject{

Object *obj = [[Object alloc] init];
NSString *string1 = [obj methodOnObject];
NSString *string2 = [NSString stringWithFormat:@"prepend %@", string1];

return string2;

我希望能够在 methodOnObject 与文件系统交互时停止对它的调用,并只返回一个字符串。我该怎么做?

最佳答案

不可能按原样处理您的代码。您可以做两件事来测试这种情况 - 使用依赖项注入(inject)或工厂方法。

选项 1 - 依赖注入(inject):

更改您的方法签名以要求对象而不是创建它:

-(NSString *) methodWithObject:(Object*)obj
{
}

此方法优于选项 2,但不完全符合您提出的问题。

选项 2 - 工厂方法:

不是内联创建对象,而是使用辅助方法将其返回给您:

- (NSString *) methodWithLocallyDeclaredObject{

Object *obj = [self newObject];
NSString *string1 = [obj methodOnObject];
NSString *string2 = [NSString stringWithFormat:@"prepend %@", string1];

return string2;
}

-(Object*)newObject
{
return [[Object alloc] init];
}

然后您可以使用部分模拟来模拟 newObject 方法并返回不同的东西。

id partiallyMockedObject = [OCMockObject partialMockForObject:objectToTest];
[[[partiallyMockedObject expect] andReturn:yourMock] newObject];

因此,您部分模拟了要测试的对象 (objectToTest),以返回本地创建对象的 stub 实现

关于ios - OCMock:在本地声明的对象上模拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23068534/

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