gpt4 book ai didi

ios - 如何使用 OCMockito stub 类方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:44:53 24 4
gpt4 key购买 nike

OCMockito documentation claims it's possible to mock class objects ,但如果我能弄清楚怎么做,我该死。以下测试因 Expected "Purple"but was "" 失败:

- (void)testClassMethodMocking
{
Class stringClassMock = mockClass([NSString class]);
[given([stringClassMock string]) willReturn:@"Purple"];

assertThat([NSString string], equalTo(@"Purple"));
}

如果回答上面链接的常见问题解答部分“你如何模拟类对象?” 是否暗示可以对类方法的返回值进行 stub ,它用于什么?

编辑:

当然上面是一个退化的例子,真正的[NSString string]调用在被测方法内部:

- (NSString *)methodThatCallsAClassMethod
{
return [NSString string];
}

...使上面的断言看起来像:

assertThat([testedObject methodThatCallsAClassMethod], equalTo(@"Purple"));

所以上面的方法完全行不通?那么,我如何在这里实现我想做的事情呢?

最佳答案

您的断言语句直接使用了 NSString。改用模拟:

assertThat([stringClassMock string], equalTo(@"Purple"));

换句话说,mock 并没有调配实际的 NSString。相反,它是它的替代品。

编辑:

在您编辑的示例中,您的“methodThatCallsAClassMethod”依赖于 NSString。如果您想替换它,您要么需要注入(inject)类,要么需要注入(inject)子类和重写方法。

注入(inject):

return [self.stringClass string];

然后您可以将 stringClass 属性设置为模拟。

子类和覆盖方法:

@interface TestingFoo : Foo
@end

@implementation @TestingFoo

- (NSString *)methodThatCallsAClassMethod
{
// return whatever you want
}

@end

关于ios - 如何使用 OCMockito stub 类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799393/

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