Похоже, что класс hamcrest org.hamcrest.Matchers
очень похож на org.hamcrest.CoreMatchers
(хотя похоже, что Matchers
больше). Почему я должен использовать CoreMatchers
(кроме того, что он выглядит немного меньше), и почему эти два класса настолько похожи?
Разница между библиотеками-хранителями-матрицами и ядром CoreMatchers для hamcrest-core
Ответ 1
Соединители Hamcrest разделены на несколько модулей. "Ядро" включает в себя самые основные классы и абстрактные классы, необходимые для построения других помощников. org.hamcrest.CoreMatchers
включает методы factory только для этих сопоставлений. Другие матчи находятся в "библиотечном" модуле, сгруппированном по типам объектов, которые они соответствуют, и являются необязательными. org.hamcrest.Matchers
включает оба набора соответствий.
Что вы должны использовать? Я статически импортирую все из последних без проблем. Возможно, время компиляции может занять немного больше времени, но это никогда не было проблемой для меня. Я поставил это в верхней части моих модульных тестов в дополнение к импорту JUnit:
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
Это дает лучшую читаемость в методах тестирования.
Ответ 2
Если вы используете Mockito много (как и я), вы можете делать:
import org.mockito.Mockito;
или
static import org.mockito.Mockito.*;
и поскольку класс Mockito
расширяет класс Mockito Matchers
, то вы можете столкнуться с конфликтами между классами Matchers или их статическими методами. Наличие CoreMatchers позволяет мне использовать ядра CoreMatchers, созданные на основе JUnit, в том же классе, что и Mockito, без необходимости полностью квалифицировать их в своей точке использования.