• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:21:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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"urple"];

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

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

编辑:

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

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

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

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

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



Best Answer-推荐答案


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

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

换句话说,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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap