有没有在生产代码中使用Hamcrest匹配器的方法?

时间:2011-11-30 21:36:17

标签: java hamcrest

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

这样的东西
if ( isNotEmpty(name) ) return //....

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

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

4 个答案:

答案 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")))) {
...
}