2015-06-18 3 views
0

Я использую весенний тест с mockmvc, и он работает как прелесть для тестирования вывода xml!Тестирование содержимого XML без использования mock mvc

Пример:

ResultActions actions = this.mockMvc.perform(get("/entry/NX_P38398/overview.xml")); 
actions.andExpect(xpath("entry/overview/gene-name-list/gene-name[@type='recommended']").exists()); 
actions.andExpect(xpath("entry/overview/gene-name-list/gene-name[@type='recommended']").string("BRCA1")); 

Я хотел бы воспользоваться теми же функциями для тестирования OutputStream без использования mockmvc и контроллеров. Можно ли использовать тот же ResultMatcher?

Пример (псевдо-код):

XMLContent xmlContent = new XMLContent("<entry>...</entry>"); 
AssertTrue(xmlContent.andExpect(xpath("entry/overview/gene-name-list/gene-name[@type='recommended']").exists()); 

Я знаю, что он существует XMLUnit http://xmlunit.sourceforge.net/userguide/html/ar01s05.html или другие библиотеки, но я хотел бы повторно использовать один и тот же ResultMatcher.

Благодаря

ответ

1

Нет, это не представляется возможным повторное использование XpathResultMatchers без MockMvc и смежных классов.

Однако ... код, о котором идет речь (в примере вашего псевдокода), делегирует внутренне значение XpathExpectationsHelper Spring. Поэтому вы можете вызвать, например, метод exists() непосредственно на экземпляр XpathExpectationsHelper, если вы этого желаете.

В качестве альтернативы вы можете написать свои собственные простые утверждения, основанные на XPath, используя javax.xml.xpath.XPath, который XpathExpectationsHelper использует внутренне в любом случае. Или ... как вы упомянули, просто используйте встроенную поддержку XPath в XMLUnit.

+0

Спасибо за ваш четкий ответ! – ddtxra

Смежные вопросы