Разница между Hamcrest-library Matchers и hamcrest-core CoreMatchers
похоже hamcrest org.hamcrest.Matchers
класс очень похож на org.hamcrest.CoreMatchers
(хотя это выглядит как Matchers
больше). Почему я решил использовать CoreMatchers
(кроме того, что похоже, что класс немного меньше), и почему эти два класса так похожи?
3 ответа:
Hamcrest matchers разделены на несколько модулей. "Ядро" включает в себя самые основные сопоставители и абстрактные классы, необходимые для построения других сопоставителей.
org.hamcrest.CoreMatchers
включает заводские методы только для этих сопоставителей. Другие сопоставители находятся в модуле" библиотека", сгруппированном по типам объектов, которым они соответствуют, и являются необязательными.org.hamcrest.Matchers
включает в себя оба набора вычислителей.что вы должны использовать? Я статически импортирую все из последнего без каких-либо проблем. Возможно время компиляции может занять немного больше времени, но это никогда не было проблемой для меня. Я поставил это в верхней части моих модульных тестов в дополнение к импорту JUnit:
import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*;
Это дает лучшую читаемость в методы испытаний.
если вы используете Mockito много (как и я), вы можете делать:
import org.mockito.Mockito;
или
static import org.mockito.Mockito.*;
и с
Mockito
класс расширяет MockitoMatchers
класс, то вы можете в конечном итоге с конфликтами между классами Matchers или их статическими методами. Наличие CoreMatchers позволяет мне использовать JUnit-производные CoreMatchers в том же классе, что и Mockito, без необходимости полной квалификации их в точке использования.
если вы используете тесты JUnit Android (не подключенные тесты), то
CoreMatcher
s, кажется, доступны внутри уже включенных junit модуль, в то время какMatchers
нет.таким образом, чтобы сэкономить накладные расходы и избежать импорта другой библиотеки, рассмотрите возможность использования
CoreMatcher
версии этих классов, если они достаточно:assertThat(chrome.twiddle(), is(equalTo(0)));
можно использовать только
CoreMatcher
s.