5

我有一个控制器,它返回 XML 数据以响应调用。下面是代码

@RequestMapping(value = "/balance.xml",method = RequestMethod.GET,produces="application/xml")
public AccountBalanceList getAccountBalanceList(@RequestParam("accountId") Integer accountId)
{
    AccountBalanceList accountBalanceList = new AccountBalanceList();
    List<AccountBalance> list = new ArrayList<AccountBalance>();
    list = accountService.getAccountBalanceList(accountId);

    accountBalanceList.setList(list);
    return accountBalanceList;
}

accountBalanceList 用 xml 注释。我从这个调用中得到的响应是这样的

<points>
 <point>
  <balance>$1134.99</balance>
  <lots>10000.0</lots>
  <onDate>2012-11-11 15:44:00</onDate>
 </point>
</points>

我想为此控制器调用编写集成测试。我知道如何使用 JSON 响应测试控制器,但我不知道如何测试响应何时为 XML。任何帮助将不胜感激。

问候

4

1 回答 1

8

假设您正在Spring 3.2+使用 Spring MVC 测试框架(在 3.2 之前它是一个独立项目,可在 github 上找到)。要改编官方文档中的示例:

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("test-servlet-context.xml")
public class AccountIntegrationTests {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void getAccount() throws Exception {
        Integer accountId = 42;
        this.mockMvc.perform(get("/balance.xml")
          .param("accountId", accountId.toString())
          .accept("application/json;charset=UTF-8"))
          .andExpect(status().isOk())
          .andExpect(content().contentType("application/xml"));
          .andExpect(content().xml("<points>(your XML goes here)</points>"));               
    }
}

验证 XML 文件本身的内容就是从响应内容中读取它。


编辑:回复:获取 XML 内容

content()返回ContentResultMatchers的一个实例,它有几个方便的方法来测试内容本身,具体取决于类型。更新了上面的示例以显示如何验证 XML 响应的内容(请注意:根据文档,此方法需要XMLUnit才能工作)

于 2013-04-25T10:13:32.913 回答