我想使用hamcrest作为糖框架在if
语句中使用,而不是在带有断言的单元测试中,而是在原始生产代码中。
就像是
if ( isNotEmpty(name) ) return //....
或者
if ( isEqual(name, "John")) return //...
就像AssertThat
但没有抛出错误,只是返回布尔值。可能吗?
它只是 Java,取决于你选择用它做什么。Hamcrest 主页说:
提供一个匹配器对象库(也称为约束或谓词),允许以声明方式定义“匹配”规则,以便在其他框架中使用。典型场景包括测试框架、模拟库和 UI 验证规则。
注意:Hamcrest 它不是一个测试库:碰巧匹配器对测试非常有用。
还有一个关于使用 Hamcrest的其他框架的页面。
您可以使用matches(value)
任何Matcher
实例的方法。
if (equalTo("John").matches(name)) { ... }
为了提高可读性,创建您自己的辅助方法,类似于assertThat
.
public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) {
return matcher.matches(actual);
}
...
if (checkThat(name, equalTo("John"))) { ... }
如果您想出比 更好的名称checkThat
,ifTrueThat
请在评论中添加。:)
跟进大卫的回答,我们目前正在这样做,我们的辅助方法被命名为“the()”。这导致如下代码:
if(the(name, is(equalTo("John")))) {...}
最后会有点 lisp-y,但即使对客户来说也非常易读。
有提供以下语法的bool 项目:
if(the(name, is(equalTo("Alex")))) {
...
}