Ehm*_*Kah 11 java junit hamcrest matcher
几天后我正在使用Junit的Matchers功能.一切正常,但我正在寻找一个使用比较器进行比较的匹配器,它不依赖于对象等于方法.
我想替换
Assert.assertThat(one, CoreMatchers.equalTo(two)
Run Code Online (Sandbox Code Playgroud)
与(伪代码)类似的东西
Assert.assertThat(eins, CoreMatchers.equalTo(operand, new MyComparator())
Run Code Online (Sandbox Code Playgroud)
你知道是否有一个简单的开箱即用的解决方案?我没有在谷歌找到一个,也不想写一个.
Nat*_*own 12
现在,Hamcrest 2.0.0.0+支持此功能.
您可以使用org.hamcrest.comparator.ComparatorMatcherBuilder类来实现此目的,例如:
ComparatorMatcherBuilder builder = ComparatorMatcherBuilder.comparedBy(equivalenceComparator);
Assert.assertThat(eins, builder.comparesEqualTo(operand));
Run Code Online (Sandbox Code Playgroud)
我不知道汉克雷斯特有什么可以做到这一点。您可能需要编写一个自定义匹配器。需要考虑的一件事是:如果equals不返回true,则对象是否相等?如果您正在测试特定属性,您的自定义匹配器可能会更清晰FeatureMatcher(Is there a simple way to match a field using Hamcrest?)。例如,如果测试针对预期标签:
assertThat(eins, equalToUnderComparison("1", new LabelComparator());
Run Code Online (Sandbox Code Playgroud)
可能更清楚:
assertThat(eins, hasLabel(eq("1")));
Run Code Online (Sandbox Code Playgroud)
编写自定义匹配器不需要大量代码(编写自定义匹配器),如果它使代码更具可读性,则没有理由避免它。
| 归档时间: |
|
| 查看次数: |
3203 次 |
| 最近记录: |