是否可以使用OCMock存根NSProcessInfo?

时间:2016-02-02 03:27:46

标签: ios unit-testing ocmock

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

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

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

[增订] 根据Erik的建议,问题得以解决。我需要存根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)];

1 个答案:

答案 0 :(得分:2)

您必须确保通过对processInfo类方法进行存根来实际使用模拟。这在OCMock网站首页标题为“为实例创建存根和类方法”一节中显示。

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

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