【问题标题】:OCMock doesn't stub NSBundle methodOCMock 不存根 NSBundle 方法
【发布时间】:2015-06-19 00:43:22
【问题描述】:

我最近开始使用 OCMock 进行单元测试。我需要存根 来自NSBundleobjectForInfoDictionaryKey: 方法。我做了以下事情:

self.bundleMock = OCMClassMock([NSBundle class]);
OCMStub([self.bundleMock objectForInfoDictionaryKey:@"GITHash"]).andReturn(@"c424242");
;

这是我想要存根的电话:

NSString * appHashString = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"GITHash"];

但似乎没有任何东西被存根,在运行时我仍然有“正确”的值。

我做错了什么?

【问题讨论】:

    标签: objective-c unit-testing nsbundle xctest ocmock


    【解决方案1】:

    我可能记错了,但我认为您需要使用partialMockForObject 模拟[NSBundle mainBundle] 返回的实例,而不是模拟NSBundle 类,因为objectForInfoDictionaryKey 是实例方法,而不是类方法。

    【讨论】:

    • 感谢您的回答!我之前没有注意到这个方法!
    • 所以我使用的不是问题中的代码,而是使用什么?
    • 在此处查看文档 - ocmock.org/reference/#partial-mocks 与原始问题的代码保持一致:self.bundleMock = OCMPartialMock([NSBundle mainBundle]); OCMStub([self.bundleMock objectForInfoDictionaryKey:@"GITHash"]).andReturn(@"c424242"); 这会模拟实例,以便调用实例方法返回存根返回值。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多