如何为Junit测试用例编写xPath

时间:2016-02-14 18:10:14

标签: xml spring-mvc xpath junit mockito

我有以下XML字符串, 如何编写XPath以获取价值" rest / accounts / 123"

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<account xmlns:atom="http://www.w3.org/2005/Atom">
    <atom:link rel="self" href="http://localhost/rest/accounts/123"/>
    <name>satya</name>
    <password>123</password> 
</account>

我正在尝试编写JUnit测试用例

mockMvc.perform(get("/rest/accounts/123")
        .contentType(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_XML))
            .andDo(print())
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andExpect(xpath("/account/atom:link/href()")
              .string(containsString("/rest/accounts/123")))
            .andExpect(xpath("/account/name/text()").string(equalTo("satya")));

但行

  

MockMvcResultMatchers.xpath(&#34; /帐户/原子:链路/ HREF()&#34)的字符串(。                                   Matchers.containsString(&#34; /休息/帐户/ 123&#34)))

投掷错误。

根据建议我将代码更改为

 mockMvc.perform(
                MockMvcRequestBuilders.get("/rest/accounts/123").contentType(MediaType.APPLICATION_JSON)
                        .accept(MediaType.APPLICATION_XML))

                .andDo(print())
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(
                        MockMvcResultMatchers.xpath("/account/atom:link/@href,").string(
                                Matchers.containsString("/rest/accounts/123")))
                .andExpect(MockMvcResultMatchers.xpath("/account/name/text()").string(Matchers.equalTo("satya")));

        // .andExpect(MockMvcResultMatchers.jsonPath("$.links[*].href").exists());
    }

Junit测试用例给出错误

  

com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception:   前缀必须解析为命名空间:atom

1 个答案:

答案 0 :(得分:0)

您可以使用substring-after功能:

substring-after(//atom:link/@href, "http://localhost/")