ios - 是否可以使用 OCMock stub NSProcessInfo ?

标签 ios unit-testing ocmock

我想 stub [[NSProcessInfo processInfo] OperatingSystemVersion]以采用任何操作系统版本。

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

但是返回了iOS模拟器的操作系统版本。是否可以 stub NSProcessInfo 方法?并且, stub Foundation 的类(class)是否合适?


[已更新] 在埃里克的建议下,问题得到了解决。我需要对 processInfo 类方法进行 stub 以返回 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)];

最佳答案

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

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

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

关于ios - 是否可以使用 OCMock stub NSProcessInfo ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144522/

相关文章:

ios - 从 VC 到 TabBar 到 VC (iOS) 的 Segue 数据

javascript - 尝试使用 Karma/Jasmine 测试 Angular,但无法让 Jasmine 测试正确设置 $scope

javascript - 用 jasmine 监视异步函数

ios - 制作新格式(例如 ".rcb")

ios - 我无法从委托(delegate)快速加载数据

iphone - 删除 UITableViewCells 之间的间距

java - 使用unittest调用时org.json.JSONObject.getNumber()抛出 "NoSuchMethodError"

objective-c - OCMock 2.2.1、Xcode 5.0.2、XCTest 和模拟类方法(在类别中声明)的问题

ios - CLLocationManagerDelegate 模拟用户拒绝

objective-c - 如何使用 OCMock 初始化具有 stub 值的对象