OCMock 返回值

发布于 2024-08-08 21:53:20 字数 475 浏览 4 评论 0原文

我正在尝试为一个方法编写一个测试,其中输出取决于 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 的新手,因此非常感谢任何其他相关提示。

谢谢。

I'm trying to write a test for a method where the output depends on an NSDate's timeIntervalSinceNow return value. I'd like to specify the return value in my tests so I can test certain scenarios.

I'm having a really hard time getting this OCMock object returning what I'd like. Here's my code:

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.");

This generates a "error: expected specifier-qualifier-list before 'typeof" error.

Any thoughts? I'm new to ObjC, so any other related tips are greatly appreciated.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秉烛思 2024-08-15 21:53:20

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

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

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

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

Actually, it is a compiler error, not an OCMock error.
This has something to do with the way the OCMOCK_VALUE(t) macro works. It is defined as:

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

The typeof() directive is not part of C89, so make sure you have set your compiler to use -std=gnu89 or std=gnu99 flag. According to the Apple docs, if you set it to Compiler Default this is equivalent to gnu89, which is fine also.

This is probably the cause of your error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文