不使用mock mvc测试XML内容

时间:2015-06-18 15:27:36

标签: xml spring unit-testing xpath spring-test

我正在使用带有mockmvc的spring test,它就像测试xml输出的魅力一样!

示例:

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 个答案:

答案 0 :(得分:1)

不,如果没有XpathResultMatchers及相关类,则无法重复使用MockMvc

然而......有问题的代码(在您的伪代码示例中),在内部委托给Spring XpathExpectationsHelper。因此,如果您愿意,可以直接在exists()的实例上调用XpathExpectationsHelper方法。

作为替代方案,您可以使用javax.xml.xpath.XPath基于XPath编写自己的简单断言,这是XpathExpectationsHelper内部使用的内容。或者......正如您所提到的,只需在XMLUnit中使用XPath的内置支持。