Собственные матчеры аргументов.

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

Предположим, что мы разрабатываем систему, которая записывает какие-либо заказы пользователей для выполнения на какой-то день в будущем, причём день этот задаётся, например, уровнем пользователя. Заказ для одного класса пользователей выполняется на следующий день, для другого через три дня. И мы хотим протестировать метод, сохраняющий заказы с добавлением дней:

Разумеется, можно просто захватить аргумент addOrder() и проверить корректно задания даты. Однако это требует достаточно большого количества кода и если вызовов таких много, то можно сделать и свой матчер, для повышения читаемости тестов.

Матчеры реализуют интерфейс IArgumentMatcher, который имеет два метода: matches(), выполняющий непосредственную проверку, и appendTo() добавляющий данные о матчере в строковый буфер, чтобы было что показать пользователю. Кроме того, рекомендуется сделать статический метод, для облегчения использования матчера.

Использование такого матчера очевидно, и не отличается от использования других матчеров:

Код примера доступен на github.