4

У меня есть контроллер, который возвращает XML-данные в ответ на вызов. Ниже приведен кодИнтеграционные тесты контроллера Spring MVC

@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.The ответ я получаю от этого вызова, как этот

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

Я хочу написать интеграционный тест для этого контроллера вызова. Я знаю, как тестировать контроллер с ответом JSON, но я не знаю, как тестировать, когда ответ находится в XML. Любая помощь будет оценена.

С уважением

ответ

8

Предполагая, что вы на Spring 3.2+ вы можете использовать Spring Framework тестирования MVC (до 3.2 он был самостоятельным проектом, available on github). Для того, чтобы адаптировать пример из official documentation:

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-файла будет вопрос чтении из содержания ответа.


EDIT: Re: получение содержимого XML

content() возвращает экземпляр ContentResultMatchers, который имеет несколько удобных методов для тестирования самого содержания, в зависимости от типа. Обновленный пример выше, чтобы показать, как проверить содержимое ответа XML (, пожалуйста, обратите внимание: в соответствии с документацией этот метод требует XMLUnit для работы)

+0

Благодарим за ответ. Я попробовал 'andExpect (content(). String())', но не смог получить результат. Предположим, мне нужно попробовать что-то еще. Спасибо –

+0

Обновлен ответ, чтобы показать, как проверить, что ответ содержит ожидаемый XML , – kryger

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