Разница между Hamcrest-library Matchers и hamcrest-core CoreMatchers


похоже hamcrest org.hamcrest.Matchers класс очень похож на org.hamcrest.CoreMatchers (хотя это выглядит как Matchers больше). Почему я решил использовать CoreMatchers (кроме того, что похоже, что класс немного меньше), и почему эти два класса так похожи?

3 56

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 класс расширяет Mockito Matchers класс, то вы можете в конечном итоге с конфликтами между классами Matchers или их статическими методами. Наличие CoreMatchers позволяет мне использовать JUnit-производные CoreMatchers в том же классе, что и Mockito, без необходимости полной квалификации их в точке использования.

если вы используете тесты JUnit Android (не подключенные тесты), то CoreMatchers, кажется, доступны внутри уже включенных junit модуль, в то время как Matchers нет.

таким образом, чтобы сэкономить накладные расходы и избежать импорта другой библиотеки, рассмотрите возможность использования CoreMatcher версии этих классов, если они достаточно:

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

можно использовать только CoreMatchers.