在现代风格的 OCMock 中使用忽略非对象参数时崩溃



我试图使用 OCMock 框架模拟下面提到的方法,该框架将整数变量作为第二个参数。我也尝试使用旧式 OCMock 存根调用,结果相同。使用现代语法,我编写的代码就像波纹管一样。

@interface Session : NSObject 
- (Request *)RequestForURL:(NSURL *)url 
flags:(unsigned int)flags
error:(NSError **)error;
@end

这个会话类被模拟了,我想从这个模拟的方法返回模拟的请求。

id session = OCMClassMock(Session.class);
id Request = OCMClassMock(Request.class);
OCMStub([[session ignoringNonObjectArgs] RequestForURL:(NSURL *)OCMArg.anyObjectRef flags:0 error:OCMArg.anyObjectRef]).andReturn(Request);

这编译得很好。但是在运行测试时,它在调用时崩溃 请求网址 我知道我正在使用现代 OCMock 语法。我认为错误发生在不知何故没有被忽略的标志中。

好吧,原来是我愚蠢的错误之一。 anyObjectRef 是引用,any 是一个 id,这里我们需要一个 id,我正在使用 ref 并将其转换为 NSURL * ...[脸掌在我身上]

正确的方法:

OCMStub([[session ignoringNonObjectArgs] RequestForURL:OCMArg.any flags:0 error:OCMArg.any]).andReturn(Request);

最新更新