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=gnu89またはstd=gnu99フラグを使用するように設定していることを確認してください。Apple docs によると、これを設定するCompiler Defaultと gnu89 と同等であり、これも問題ありません。

これがおそらくエラーの原因です。

于 2009-10-23T13:32:17.283 に答える