Хэмкрест


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», который можно комбинировать с объектами «сопоставителя», что приводит к такому синтаксису:

Преимущество состоит в том, что при сбое утверждения по-прежнему появляются сообщения об ошибках, но с большей расширяемостью. Теперь можно определить операции, которые принимают сопоставители в качестве аргументов и возвращают их в качестве результатов, что приводит к грамматике, которая может генерировать огромное количество возможных выражений сопоставителей из небольшого числа примитивных сопоставителей.