是否可以使用 OCMock 存根 NSProcessInfo?
Is it possible to stub NSProcessInfo with OCMock?
我想存根 [[NSProcessInfo processInfo] operatingSystemVersion]
以使用任何 OS 版本。
id processInfoMock = OCMClassMock([NSProcessInfo class]);
[OCMStub([processInfoMock operatingSystemVersion]) andReturnValue:NULL];
NSOperatingSystemVersion osVersion = [[NSProcessInfo processInfo] operatingSystemVersion];
但是 iOS 模拟器的 OS 版本是 returned。是否可以存根 NSProcessInfo 方法?而且,存根 Foundation 的 classes 是否合适?
[更新]
在 Erik 的建议下,问题得以解决。我需要将 processInfo
class 方法存根到 return 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
class 方法来确保实际使用模拟。这显示在 OCMock 网站首页标题为 "Creating stubs for instance and class methods" 的部分中。
顺便问一下,为什么要混合使用不同的句法风格?为什么不直接写
OCMStub([processInfoMock operatingSystemVersion]).andReturn(NULL);
我想存根 [[NSProcessInfo processInfo] operatingSystemVersion]
以使用任何 OS 版本。
id processInfoMock = OCMClassMock([NSProcessInfo class]);
[OCMStub([processInfoMock operatingSystemVersion]) andReturnValue:NULL];
NSOperatingSystemVersion osVersion = [[NSProcessInfo processInfo] operatingSystemVersion];
但是 iOS 模拟器的 OS 版本是 returned。是否可以存根 NSProcessInfo 方法?而且,存根 Foundation 的 classes 是否合适?
[更新]
在 Erik 的建议下,问题得以解决。我需要将 processInfo
class 方法存根到 return 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
class 方法来确保实际使用模拟。这显示在 OCMock 网站首页标题为 "Creating stubs for instance and class methods" 的部分中。
顺便问一下,为什么要混合使用不同的句法风格?为什么不直接写
OCMStub([processInfoMock operatingSystemVersion]).andReturn(NULL);