web-dev-qa-db-fra.com

Différence entre Hamcrest-library Matchers et hamcrest-core CoreMatchers

On dirait le hamcrest org.hamcrest.Matchers class est très similaire à org.hamcrest.CoreMatchers (bien qu'il ressemble à Matchers en a plus). Pourquoi devrais-je choisir d'utiliser CoreMatchers (à part cela, la classe est légèrement plus petite), et pourquoi ces deux classes sont-elles si similaires?

68
Jeff Storey

Les matchers Hamcrest sont divisés en plusieurs modules. Le "noyau" comprend les corrélateurs les plus élémentaires et les classes abstraites nécessaires pour créer d'autres corrélateurs. org.hamcrest.CoreMatchers inclut les méthodes d'usine pour ces égaliseurs uniquement. Les autres correspondants sont dans le module "bibliothèque" regroupés par types d'objets qu'ils correspondent et sont facultatifs. org.hamcrest.Matchers inclut les deux ensembles d'apparieurs.

Que devez-vous utiliser? J'importe statiquement tout de ce dernier sans aucun problème. Peut-être que les temps de compilation peuvent prendre un peu plus de temps, mais cela n'a jamais été un problème pour moi. Je mets cela en haut de mes tests unitaires en plus des importations JUnit:

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

Cela donne la meilleure lisibilité dans les méthodes de test.

47
David Harkness

Si vous utilisez beaucoup Mockito (comme moi), vous faites peut-être:

import org.mockito.Mockito;

ou

static import org.mockito.Mockito.*;

et puisque la classe Mockito étend la classe Matchers de Mockito, vous pouvez vous retrouver avec des conflits entre les classes Matchers ou leurs méthodes statiques. Avoir CoreMatchers me permet d'utiliser des CoreMatchers dérivés de JUnit dans la même classe que Mockito, sans avoir à les qualifier complètement à leur point d'utilisation.

11
Kevin Welker

Si vous utilisez les tests JUnit d'Android (tests non connectés), les CoreMatcher semblent être disponibles dans le module déjà inclus junit, tandis que les Matchers ne le sont pas .

Ainsi, pour économiser les frais généraux et éviter d'importer une autre bibliothèque, envisagez d'utiliser les versions CoreMatcher de ces classes si elles suffisent:

assertThat(chrome.twiddle(), is(equalTo(0)));

est possible en utilisant uniquement CoreMatchers .

1
serv-inc