2014-02-13 2 views
2

это являются аннотированные методы в контроллере:метод тестирования @ModelAttribute на контроллере

@RequestMapping(method = RequestMethod.GET) 
public String getClient(@PathVariable("contractUuid") UUID contractUuid, Model model) { 
    ClientDto clientDto = new ClientDto(); 
    clientDto.setContractUuid(contractUuid); 
    model.addAttribute("client", clientDto); 
    return "addClient"; 
} 

@ModelAttribute("contract") 
public ContractDto getContract(@PathVariable("contractUuid") UUID contractUuid) throws ContractNotFoundException { 
    return contractService.fromEntity(contractService.findByUuid(contractUuid)); 
} 

Метод испытания, что я пытаюсь показано ниже, но она не для атрибута контракта. Атрибут клиент добавлен в Модель в @RequestMapping метод.

private MockMvc mockMvc; 
@Autowired 
private ContractService contractServiceMock; 
@Autowired 
private ClientService clientServiceMock; 
@Autowired 
protected WebApplicationContext wac; 

@Before 
public void setup() { 
    Mockito.reset(contractServiceMock); 
    Mockito.reset(clientServiceMock); 
    this.mockMvc = webAppContextSetup(this.wac).build(); 
} 

@Test 
public void test() throws Exception { 
    UUID uuid = UUID.randomUUID(); 
    Contract contract = new Contract(uuid); 

    when(contractServiceMock.findByUuid(uuid)).thenReturn(contract); 

    mockMvc.perform(get("/addClient/{contractUuid}", uuid)) 
      .andExpect(status().isOk()) 
      .andExpect(view().name("addClient")) 
      .andExpect(forwardedUrl("/WEB-INF/pages/addClient.jsp")) 
      .andExpect(model().attributeExists("client")) 
      .andExpect(model().attributeExists("contract")); 
} 

контракт атрибут показывает на странице JSP при запуске приложения, поскольку я использую некоторые из его атрибутов, но так как он не в методе испытаний есть другой способ, чтобы проверить это? Это терпит неудачу с сообщением:

java.lang.AssertionError: Model attribute 'contract' does not exist

Весна 4.0.1.RELEASE

+0

Вы также можете опубликовать метод @RequestMapping? –

+0

Вы тестируете addClient, показываете, что – NimChimpsky

+0

@NimChimpsky вы хотите, чтобы я показал тестовый класс для addCLient? – amb

ответ

1

Кажется, это была моя вина. Даже если метод @ModelAttribute возвращает экземпляр ContractDto я только дразнил один метод, используемый от службы:

when(contractServiceMock.findByUuid(uuid)).thenReturn(contract); 

и так findByUuid вернулся что-то, но contractService.fromEntity остался нетронутым поэтому я должен был также издеваться над этим:

UUID uuid = UUID.randomUUID(); 
    Contract contract = new Contract(uuid); 
    ContractDto contractDto = new ContractDto(uuid); 

    when(contractServiceMock.findByUuid(uuid)).thenReturn(contract); 
    when(contractServiceMock.fromEntity(contract)).thenReturn(contractDto); 
Смежные вопросы