我想使用hamcrest作为糖框架在if
语句中使用,而不是在使用断言的单元测试中使用,但在原始生产代码中使用。任何方式在生产代码中使用Hamcrest匹配器?
喜欢的东西
if (isNotEmpty(name)) return //....
或
if (isEqual(name, "John")) return //...
就像AssertThat
,但没有引发错误,只是返回布尔值。 这可能吗?
我想使用hamcrest作为糖框架在if
语句中使用,而不是在使用断言的单元测试中使用,但在原始生产代码中使用。任何方式在生产代码中使用Hamcrest匹配器?
喜欢的东西
if (isNotEmpty(name)) return //....
或
if (isEqual(name, "John")) return //...
就像AssertThat
,但没有引发错误,只是返回布尔值。 这可能吗?
有提供以下语法bool project:
if(the(name, is(equalTo("Alex")))) {
...
}
这只是Java,它取决于你选择如何处理它。所述Hamcrest homepage说:
提供匹配的对象允许将声明性地定义“匹配”的规则,在其他框架中使用的库(也称为约束或谓词)。典型的场景包括测试框架,模拟库和UI验证规则。
注:Hamcrest它不是一个测试库:它只是碰巧匹配器是用于测试非常有用的。
还有使用Hamcrest的a page on the other frameworks。
同意,我只需要工作的例子,如何使用的匹配不assertThat – Vitamon
您可以使用任何Matcher
实例的matches(value)
方法。
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"))) { ... }
如果你拿出一个比如ifTrueThat
checkThat
一个更好的名字,请在注释中添加。 :)
跟随大卫的答案,我们目前正在做这个,我们的帮手方法被命名为“()”。这导致了如下代码:
if(the(name, is(equalTo("John")))) {...}
它获取在最后有点口齿不清-Y,反而使得即使客户很可读。
哇,这真是令人印象深刻! – Vitamon
恕我直言,布尔项目是一个简单的方法“the”有点矫枉过正。尽管它提供了更多的匹配器,但这些只是Hamcrest的重复(比如allOf,anyOf,无论是等等) – Jonas