在不使用 mock mvc 的情况下测试 XML 内容

Test XML content without using mock mvc

我正在使用 mockmvc 进行 spring 测试,它可以很好地测试 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"));

我想利用相同的功能在不使用 mockmvc 和控制器的情况下测试 OutputStream。 是否可以使用相同的 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。

谢谢

不,如果没有 MockMvc 和相关的 类,就不可能重用 XpathResultMatchers

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

作为替代方案,您可以使用 javax.xml.xpath.XPath 编写自己的基于 XPath 的简单断言,无论如何,XpathExpectationsHelper 在内部使用它。或者...如您所述,只需使用 XMLUnit 中对 XPath 的内置支持。