Question

I'd like to use hamcrest as sugar framework to use in if statements, not in the unit tests with asserts, but in raw production code.

Something like

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

or

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

Just like AssertThat but without throwing errors, just returning boolean. Is it possible?

Was it helpful?

Solution

There's the bool project that provides the following syntax:

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

OTHER TIPS

It's just Java, it's up to you what you choose to do with it. The Hamcrest homepage says:

Provides a library of matcher objects (also known as constraints or predicates) allowing 'match' rules to be defined declaratively, to be used in other frameworks. Typical scenarios include testing frameworks, mocking libraries and UI validation rules.

Note: Hamcrest it is not a testing library: it just happens that matchers are very useful for testing.

There is also a page on the other frameworks that use Hamcrest.

You can use the matches(value) method of any Matcher instance.

if (equalTo("John").matches(name)) { ... }

To improve the readability, create your own helper method similar to assertThat.

public static <T> boolean checkThat(T actual, Matcher<? super T> matcher) {
    return matcher.matches(actual);
}

...

if (checkThat(name, equalTo("John"))) { ... }

If you come up with a better name than checkThat such as ifTrueThat, please add it in a comment. :)

Following up on David's answer, we are currently doing exactly this, and our helper method is named "the()". This leads to code like:

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

which gets a little bit lisp-y at the end, but makes it very readable even for clients.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top