12

我想使用hamcrest作为糖框架在if语句中使用,而不是在带有断言的单元测试中,而是在原始生产代码中。

就像是

if ( isNotEmpty(name) ) return //....

或者

if ( isEqual(name, "John")) return //...

就像AssertThat但没有抛出错误,只是返回布尔值。可能吗?

4

4 回答 4

6

它只是 Java,取决于你选择用它做什么。Hamcrest 主页说:

提供一个匹配器对象库(也称为约束或谓词),允许以声明方式定义“匹配”规则,以便在其他框架中使用。典型场景包括测试框架、模拟库和 UI 验证规则。

注意:Hamcrest 它不是一个测试库:碰巧匹配器对测试非常有用

还有一个关于使用 Hamcrest的其他框架的页面。

于 2011-11-30T21:40:44.933 回答
5

您可以使用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"))) { ... }

如果您想出比 更好的名称checkThatifTrueThat请在评论中添加。:)

于 2011-12-01T22:07:32.217 回答
5

跟进大卫的回答,我们目前正在这样做,我们的辅助方法被命名为“the()”。这导致如下代码:

if(the(name, is(equalTo("John")))) {...}

最后会有点 lisp-y,但即使对客户来说也非常易读。

于 2012-01-05T01:41:09.610 回答
5

有提供以下语法的bool 项目

if(the(name, is(equalTo("Alex")))) {
...
}
于 2012-12-15T15:21:36.960 回答