Hamcrest — это фреймворк, помогающий писать тесты программного обеспечения на языке программирования Java . Он поддерживает создание настраиваемых сопоставителей утверждений («Hamcrest» — это анаграмма «сопоставителей»), что позволяет декларативно определять правила сопоставления . [1] Эти сопоставители используются в средах модульного тестирования , таких как JUnit и jMock. Hamcrest был включен в JUnit 4 с 2012 года [2] , но был исключен из JUnit 5 в 2017 году. [3]
Hamcrest был портирован на C++ , C# , [4] Objective-C , Python , [5] ActionScript 3 , [6] PHP , [7] JavaScript , [8] Erlang , [9] R , [10] Rust ,. [11] и Свифт [12]
Среды модульных тестов «первого поколения» предоставляют оператор «утверждения», позволяющий утверждать во время теста, что конкретное условие должно быть истинным. Если условие ложно, тест не пройден. Например:
Но во многих языках этот синтаксис не дает достаточно хорошего сообщения об ошибке, если «x» и «y» не равны. Было бы лучше, если бы в сообщении об ошибке отображались значения «x» и «y». Чтобы решить эту проблему, среды модульных тестов «второго поколения» предоставляют семейство утверждений, которые создают более качественные сообщения об ошибках. Например,
Но это приводит к резкому увеличению количества макросов утверждений, поскольку приведенный выше набор расширен для поддержки сравнений, отличных от простого равенства. Таким образом, среды модульного тестирования «третьего поколения» используют такую библиотеку, как Hamcrest, для поддержки оператора «assert_that», который можно комбинировать с объектами «сопоставителя», что приводит к такому синтаксису:
Преимущество состоит в том, что при сбое утверждения по-прежнему появляются сообщения об ошибках, но с большей расширяемостью. Теперь можно определить операции, которые принимают сопоставители в качестве аргументов и возвращают их в качестве результатов, что приводит к грамматике, которая может генерировать огромное количество возможных выражений сопоставителей из небольшого числа примитивных сопоставителей.