【发布时间】:2013-12-16 22:31:47
【问题描述】:
我有一个需要存根的方法。方法如下:
BOOL myMethodWithError:(*__autoreleasing *NSError)error;
所以我模拟了这个对象并试图通过“错误”返回一个 nil。我编码如下。
id mockMyObject = [OCMockObject mockForClass:[MyObject class]];
BOOL retVal = YES;
NSError *error = nil;
[[[mockMyObject stub] andReturn:OCMOCK_VALUE(retVal)] myMethodWithError:&error];
当运行测试并操作模拟对象时,错误引用id似乎发生了变化。所以mock会抛出异常:
OCMockObject[MyObject]:调用的预期方法: myMethodWithError:0xbfffca78
我尝试了许多不同的方法,但每次指针值似乎都会在错误对象传递给导致模拟对象抛出错误的方法时发生变化。
我只需要根据参数的传递引用值测试我的业务规则,但我似乎无法让模拟或测试对象配合。
提前致谢,任何帮助将不胜感激。
【问题讨论】:
-
我对这个问题有了更清晰的认识。在深入研究了 OCMock 源代码测试后,我发现执行了与我的测试类似的测试。测试使用了 [OCMArg isAnyPointer],它返回一个“void *”。这在 ARC 之前是可以的,但现在 ARC 不允许在 'void *' 和 'NSError *__autoreleasing *' 之间进行隐式转换。这现在似乎是我需要解决的问题。
-
一个更简单的解决方法是制作一个手动模拟。
标签: unit-testing ios7 tdd ocmock xctest