2011-12-21 2 views
3

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

"{\"messageType\":\"identify\",\"_id\":\"7de9a446-2ced-4bda-af35-81e95ad2dc32\",\"address\":\"192.168.0.0\",\"port\":7070}" 

Эта строка передается методу. Я использую ожидания JMock, чтобы соответствовать этому.

Проблема: «72e3a446-2fed-4bda-ac35-34e95ab3dc32» часть является случайным сгенерированным UUID, который генерируется внутри тестируемого метода. Есть ли согласовань Hamcrest Строки, которая будет соответствовать что-то вроде

new StringCompositeMatcher("{\"messageType\":\"identify\",\"_id\":\"", with(any(String.class)), "\"address\":\"192.168.0.0\",\"port\":7070}") 

Он должен соответствовать, что ожидаемой строке начинается с "{\"messageType\":\"identify\",\"_id\":\" есть любая строка после этого, и заканчивается ",\"address\":\"192.168.0.0\",\"port\":7070}"

EDIT: Решение

with(allOf(new StringStartsWith("{\"messageType\":\"identify\",\"_id\":\""), new StringEndsWith("\",\"address\":\"192.168.0.0\",\"port\":7070}"))) 
+0

Это было бы лучше, написанный 'allOf (StartsWith ("... "), EndsWith (" ..."))'. –

ответ

3

Возможно, самым изящным способом сделать это было бы использовать регулярное выражение, хотя для него нет встроенного шаблона. Однако you can easily write your own.

В качестве альтернативы вы можете комбинировать startsWith() и endsWith() с allOf().

3

Похоже, что JSON. Почему бы не использовать парсер JSON?

-1

Вы можете использовать этот Hamcrest matchers https://github.com/jayway/JsonPath/tree/master/json-path-assert

+0

Что делать, если ссылка, которую вы предоставили, будет повреждена в будущем? Всегда полезно документировать свои ответы здесь, на сайте –