假设我想断言两个结构是等价的:
// 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));
有没有办法使用像STAssertEquals
上面那样工作的 Hamcrest 来编写断言?该assertThat
行无法编译,因为宏需要id
参数,而结构不是。我尝试了equalTo
匹配器的变体,例如sameInstance
,但它们似乎都需要id
类型参数。接下来,我认为一个好的解决方法是断言任意表达式具有YES
orNO
值。像这样的东西:
assertThat(a == b);
或这个:
assertThat(a == b, isTrue());
但我在 Hamcrest 没有看到这样的东西。
我错过了一些明显的东西吗?显然,我可以通过使用 SenTest 宏(STAssertEquals
例如
我也知道我可以通过为我正在比较的特定结构实现自定义 Hamcrest 匹配器来做到这一点。但我真的在寻找一个简单的断言/匹配器,它可以比较任何 C 结构以获得简单的字节相等。
也许只是因为我提到的所有可能性都不可能与 Hamcrest 一起开箱即用。如果这是真的,我会接受一个令人信服的解释作为答案。
谢谢