2 つの構造体が同等であると主張したいとします。
// Using CGPoint here for brevity, but my question applies to any struct type
CGPoint a = CGPointMake(1, 2);
CGPoint b = CGPointMake(1, 2);
STAssertEquals(a, b, @"this works");
assertThat(a, equalTo(b));
上記のように動作する Hamcrest を使用してアサーションを記述する方法はありませんSTAssertEquals
か? assertThat
マクロはid
パラメーターを想定しているため、この行はコンパイルに失敗しますが、構造体はそうではありません。equalTo
などのマッチャーのバリエーションを試しましたが、すべて型付きパラメーターsameInstance
が必要なようです。次に、良い回避策は、任意の式がorの値id
を持つことをアサートすることだと思いました。このようなもの:YES
NO
assertThat(a == b);
またはこれ:
assertThat(a == b, isTrue());
しかし、ハムクレストではこのようなものは見当たりません。
明らかな何かが欠けていますか?などの SenTest マクロを使用してやりたいことを達成できることは明らかですが、Hamcrest を使用してSTAssertEquals
これらのアサーションを実装するのは簡単だと思っていたので、すべてのアサーションが一貫したスタイルになります。
また、比較している特定の構造体に対してカスタム Hamcrest マッチャーを実装することで、これを実行できることもわかっています。しかし、単純なバイト単位の等価性について C 構造体を比較できる単純なアサーション/マッチャーを本当に探していました。
おそらく、私が言及した可能性のどれも、Hamcrest をそのまま使用することはできないという単純なケースです。それが本当なら、私はこの趣旨の説得力のある説明を回答として受け入れます。
ありがとう