Vitamon
Vitamon

Reputation: 548

Any way to use Hamcrest matchers in production code?

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?

Upvotes: 12

Views: 2310

Answers (4)

Arend von Reinersdorff
Arend von Reinersdorff

Reputation: 4233

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

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

Upvotes: 5

Chris Fell
Chris Fell

Reputation: 53

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.

Upvotes: 5

David Harkness
David Harkness

Reputation: 36532

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. :)

Upvotes: 5

skaffman
skaffman

Reputation: 403481

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.

Upvotes: 6

Related Questions