我想使用 hamcrest 作为糖框架在if
语句中使用,而不是在带有断言的单元测试中,而是在原始生产代码中。
像
这样的东西if ( isNotEmpty(name) ) return //....
或
if ( isEqual(name, "John")) return //...
就像AssertThat
但没有抛出错误,只返回布尔值。
可能吗?
答案 0 :(得分:6)
它只是Java,它取决于你选择用它做什么。 Hamcrest homepage说:
提供一个matcher对象库(也称为约束或谓词),允许以声明方式定义“匹配”规则,以便在其他框架中使用。典型的场景包括测试框架,模拟库和UI验证规则。
注意: Hamcrest它不是一个测试库:只是匹配器对测试非常有用 。
还有a page on the other frameworks使用Hamcrest。
答案 1 :(得分: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"))) { ... }
如果您想出一个比checkThat
更好的名称,例如ifTrueThat
,请在评论中添加。 :)
答案 2 :(得分:5)
跟进David的回答,我们目前正在做这个,我们的帮助方法命名为&#34;()&#34;。这导致代码如下:
if(the(name, is(equalTo("John")))) {...}
最后得到了一些lisp-y,但即使对于客户来说也是如此。
答案 3 :(得分:5)
bool project提供以下语法:
if(the(name, is(equalTo("Alex")))) {
...
}