是否可以使用 OCMock 存根 NSProcessInfo ?



我想存根[[NSProcessInfo processInfo] operatingSystemVersion]以获取任何操作系统版本。

id processInfoMock = OCMClassMock([NSProcessInfo class]);
[OCMStub([processInfoMock operatingSystemVersion]) andReturnValue:NULL];
NSOperatingSystemVersion osVersion = [[NSProcessInfo processInfo] operatingSystemVersion];

但是返回iOS模拟器的操作系统版本。是否可以存根 NSProcessInfo 方法?而且,存根基金会的课程合适吗?


[更新]在埃里克的建议下,问题得到了解决。我需要存根processInfo类方法来返回 NSProcessinfo 的模拟实例。下面是测试通过的代码:

// Prepare fakeVersion instead of NULL.
NSOperatingSystemVersion fakeVersion = {0,0,0};
// Mock NSProcessInfo.
id processInfoMock = OCMClassMock([NSProcessInfo class]);
// Stub processInfo class method to return the mock instance.
[OCMStub([processInfoMock processInfo]) andReturn:processInfoMock];
// Stub operatingSystemVersion instance method to return fakeVersion.
[OCMStub([processInfoMock operatingSystemVersion]) andReturnValue:OCMOCK_VALUE(fakeVersion)];
// Another solution using OCMPartialMock.
// Partial mock for NSProcessInfo instance.
id processInfo = [NSProcessInfo processInfo];
id processInfoPartialMock = OCMPartialMock(processInfo);
// Stub operatingSystemVersion instance method to return fakeVersion.
[OCMStub([processInfoPartialMock operatingSystemVersion]) andReturnValue:OCMOCK_VALUE(fakeVersion)];

您必须通过存根 processInfo 类方法来确保实际使用模拟。这显示在 OCMock 网站首页上标题为"为实例和类方法创建存根"的部分中。

顺便问一下,为什么要混合不同的语法风格?为什么不直接写

OCMStub([processInfoMock operatingSystemVersion]).andReturn(NULL);

最新更新