Настроить форматирование переданного параметра в ожидании - PullRequest
2 голосов
/ 11 июля 2009

Я использую jmock, чтобы смоделировать OutputStream и установить ожидания для данных, которые записываются в него.

Так что у меня есть ожидание, которое выглядит примерно так

oneOf(stream).write(byteArrayMatching("Some string"));

(byteArrayMatching) - фабрика для специального сопоставителя.

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

java.lang.AssertionError: unexpected invocation: stream.write([<60>, <63>, ...])

Довольно сложно определить, что именно не так с данными, посмотрев на последовательность байтов (я еще не удосужился запомнить ASCII). Это в значительной степени заставляет меня запускать тест в отладчике, чтобы выяснить, что не так.

Мой вопрос: есть ли способ каким-то образом зарегистрировать средство форматирования с помощью фиктивного объекта или объекта Mockery, который может довольно просто напечатать значение параметра? Понятно, что jmock уже выполняет некоторую симпатичную печать, поскольку вышеприведенное не является выводом byte[].toString(), но я не могу найти ничего в документах API, предлагающих способ настройки этой логики симпатичной печати

Ответы [ 2 ]

0 голосов
/ 05 сентября 2009

Милый ответ заключается в том, что насмешка имеет больше смысла для определенного вами типа, который имеет некоторую доменную структуру, а не внешний API.

Следующий ответ - взглянуть на новую версию Hamcrest, в которую включена поддержка сообщения о несоответствии.

Следующий ответ, если в нем нет последовательности, заключается в том, что в этом случае может быть лучше использовать поток байтов в памяти и впоследствии утверждать строку.

И, пожалуйста, подайте вопрос:)

0 голосов
/ 30 июля 2009

Нет способа сделать это в текущей (2.5.1) библиотеке jMock. Я бы предложил вам записать улучшение в jMock.

...