2011-11-30 7 views
11

Mi piacerebbe usare hamcrest come framework di zucchero da utilizzare nelle dichiarazioni if, non nei test di unità con asserzioni, ma nel codice di produzione non elaborato.Un modo per usare gli abbinamenti Hamcrest nel codice di produzione?

Qualcosa di simile

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

o

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

Proprio come AssertThat ma senza gettare errori, basta tornare booleano. È possibile?

risposta

4

C'è il bool project che fornisce la seguente sintassi:

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

Wow, è davvero impressionante! – Vitamon

+1

Il progetto boho IMHO è un po 'eccessivo per un semplice metodo "il". Sebbene fornisca altri matcher, ma questi sono solo duplicati di quelli di Hamcrest (come allOf, anyOf, entrambi, entrambi, ecc.) – Jonas

5

È solo Java, sta a te decidere cosa farci. Il Hamcrest homepage dice:

fornisce una libreria di oggetti matcher (noto anche come vincoli o predicati) permettendo regole 'match' da definire in modo dichiarativo, per essere utilizzato in altri ambiti. Gli scenari tipici includono framework di test, librerie di simulazione e regole di convalida dell'interfaccia utente.

Nota: Hamcrest non è una libreria per i test: succede solo che matchers sono molto utili per testare.

C'è anche a page on the other frameworks che utilizza Hamcrest.

+0

Agree, ho solo bisogno di un esempio di lavoro, come utilizzare matchers senza assertThat – Vitamon

5

È possibile utilizzare il metodo matches(value) di qualsiasi istanza di Matcher.

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

per migliorare la leggibilità, creare il proprio metodo di supporto simile a assertThat.

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

... 

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

Se si arriva con un nome migliore di checkThat come ifTrueThat, si prega di aggiungere in un commento. :)

5

Seguendo la risposta di David, stiamo facendo esattamente questo, e il nostro metodo di supporto è chiamato "the()". Questo porta a un codice simile:

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

che diventa un po 'lisp-y alla fine, ma lo rende molto leggibile anche per i clienti.

Problemi correlati