【发布时间】:2012-03-06 05:36:41
【问题描述】:
假设我想断言两个结构是等价的:
// 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,但它们似乎都需要id 类型的参数。接下来,我认为一个好的解决方法是断言任意表达式具有YES 或NO 值。像这样的:
assertThat(a == b);
或者这个:
assertThat(a == b, isTrue());
但我在 Hamcrest 没有看到这样的东西。
我是否遗漏了一些明显的东西?显然,我可以通过使用诸如 STAssertEquals 之类的 SenTest 宏来完成我想做的事情,但我曾期望使用 Hamcrest 实现这些断言会很简单,因此我的所有断言都具有一致的风格。
我也知道我可以通过为我正在比较的特定结构实现自定义 Hamcrest 匹配器来做到这一点。但我真的在寻找一个简单的断言/匹配器,它可以比较任何 C 结构以实现简单的字节相等。
也许只是因为我提到的所有可能性都不可能与 Hamcrest 一起开箱即用。如果这是真的,我会接受一个令人信服的解释作为答案。
谢谢
【问题讨论】:
标签: objective-c hamcrest