将原语传递给OCMock的存根

Edu*_*sta 30 primitive xcode ocmock

我正在学习如何使用OCMock来测试我的iPhone项目,我有这样的场景:带有getHeightAtX:andY:方法的HeightMap类和使用的Render类HeightMap.我正在尝试使用一些HeightMap模拟单元测试渲染.这有效:

id mock = [OCMockObject mockForClass:[Chunk class]];
int h = 0;
[[[mock stub] andReturnValue:OCMOCK_VALUE(h)] getHeightAtX:0 andY:0];
Run Code Online (Sandbox Code Playgroud)

当然,仅适用于x=0y=0.我想测试使用"平面"高度图.这意味着我需要做这样的事情:

id chunk = [OCMockObject mockForClass:[Chunk class]];
int h = 0;
[[[chunk stub] andReturnValue:OCMOCK_VALUE(h)] getHeightAtX:[OCMArg any] andY:[OCMArg any]];
Run Code Online (Sandbox Code Playgroud)

但这引发了两个编译警告:

警告:'getHeightAtX:andY:'从没有强制转换的指针传递整数的参数1

和运行时错误:

调用了意外的方法: 'getHeightAtX:0 andY:0 stubbed: getHeightAtX:15545040 andY:15545024'

我错过了什么?我发现无法传递anyValue给这个模拟器.

And*_*ark 50

自问这个问题以来已经有一段时间了,但我自己遇到了这个问题,无法在任何地方找到解决方案.OCMock现在支持ignoringNonObjectArgs这样的一个例子expect

[[[mockObject expect] ignoringNonObjectArgs] someMethodWithPrimitiveArgument:5];
Run Code Online (Sandbox Code Playgroud)

5实际上并没有做任何事情,只是一个填充值

  • 还有一个警告,如果你有一个方法你正在使用`ignoringNonObjectArgs`,如果你在原始参数之后有一个块并且你用`[OCMarg checkWithBlock:]`来存在它,那么这个块就不会了评估(调用) (3认同)
  • 这是OP问题的正确答案.谢谢你指出这个!我没有看到这被添加到OCMock. (2认同)

Chr*_*lay 18

OCMock目前不支持原始参数的松散匹配.有关在OCMock论坛上支持此问题的潜在变化的讨论虽然似乎已停滞不前.

我发现的唯一解决方案是以这样的方式构建我的测试,即我知道将传入的原始值,尽管它远非理想.