4

我正在尝试为输出取决于 NSDate 的 timeIntervalSinceNow 返回值的方法编写测试。我想在我的测试中指定返回值,以便我可以测试某些场景。

我很难让这个 OCMock 对象返回我想要的东西。这是我的代码:

id mock = [OCMockObject mockForClass:[NSDate class]];
NSTimeInterval t = 20.0;
[[[mock stub] andReturnValue:OCMOCK_VALUE(t)] timeIntervalSinceNow];
STAssertEquals([mock timeIntervalSinceNow], 20.0, @"Should be eql.");

这会生成“错误:'typeof”错误之前的预期说明符限定符列表。

有什么想法吗?我是 ObjC 的新手,因此非常感谢任何其他相关提示。

谢谢。

4

1 回答 1

5

实际上,这是一个编译器错误,而不是 OCMock 错误。这与OCMOCK_VALUE(t)宏的工作方式有关。它被定义为:

#define OCMOCK_VALUE(variable) [NSValue value:&variable withObjCType:@encode(typeof(variable))]

typeof() 指令不是 C89 的一部分,因此请确保您已将编译器设置为使用 -std=gnu89std=gnu99标志。根据Apple docs,如果你将它设置为Compiler Default这相当于gnu89,这也很好。

这可能是您的错误的原因。

于 2009-10-23T13:32:17.283 回答