2016-07-02 4 views
0

Я пытаюсь протестировать срез MVC Spring Boot 1.4.0.M3. Контроллер это.Spring Boot 1.4 MVC-тестирование с результатами Thymeleaf в TemplateProcessingException

@Controller 
public class ProductController { 

private ProductService productService; 

@Autowired 
public void setProductService(ProductService productService) { 
    this.productService = productService; 
} 

@RequestMapping("product/{id}") 
public String showProduct(@PathVariable Integer id, Model model){ 
    model.addAttribute("product", productService.getProductById(id)); 
    return "productshow"; 
} 
} 

Минимизированная вид шаблона productshow.html thymeleaf это.

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<body> 
<div class="container"> 
    <h2>Product Details</h2> 
    <div> 
     <form class="form-horizontal"> 
      <div class="form-group"> 
       <label class="col-sm-2 control-label">Product Id:</label> 
       <div class="col-sm-10"> 
        <p class="form-control-static" th:text="${product.id}">Product Id</p></div> 
      </div> 
      <div class="form-group"> 
       <label class="col-sm-2 control-label">Description:</label> 
       <div class="col-sm-10"> 
        <p class="form-control-static" th:text="${product.description}">description</p> 
       </div> 
      </div>     
     </form> 
    </div> 
    </div> 
</body> 
</html> 

И класс испытания - это.

@RunWith(SpringRunner.class) 
@WebMvcTest(controllers = ProductController.class, secure = false) 
//@AutoConfigureMockMvc(secure=false) 
public class ProductControllerTest { 
    @Autowired 
    private MockMvc mockMvc; 
    @MockBean 
    private ProductService productServiceMock; 

@Test 
public void testShowProduct() throws Exception { 
    Product product1 = new Product(); 
    product1.setId(1); 
    product1.setDescription("T Shirt"); 
    product1.setPrice(new BigDecimal("18.95")); 
    product1.setImageUrl("https://example.com/wp-content/uploads/2015/04/spring_framework_guru_shirt-rf412049699c14ba5b68bb1c09182bfa2_8nax2_512.jpg"); 
    when(productServiceMock.getProductById(1)).thenReturn(product1); 

    MvcResult result = mockMvc.perform(get("/product/{id}/", 1)) 
      .andExpect(status().isOk())    
      .andReturn(); 
} 
} 

При запуске теста я получаю следующее сообщение об ошибке.

2016-07-03 00:03:29.021 ERROR 6800 --- [   main] 
org.thymeleaf.TemplateEngine    : [THYMELEAF][main] Exception 
processing template "productshow": Exception evaluating SpringEL 
expression: "product.id" (productshow:19) 

org.springframework.web.util.NestedServletException: Request processing 
failed; nested exception is 
org.thymeleaf.exceptions.TemplateProcessingException: Exception 
evaluating SpringEL expression: "product.id" (productshow:19) 

Нужна помощь, чтобы решить эту проблему. Заранее спасибо.

+0

Если вы его отлаживаете, то контроллер фактически получает ваш компонент product1? Что такое код продукта? У вас есть более полная трассировка стека исключений? –

+0

Вы правы. Контроллер не получает 'product1', потому что я передавал неправильный контроллер' @ WebMvcTest'. Это должно быть 'ProductController.class' вместо' IndexController.class'. Твое предложение по изучению следствия исключений подробно помогло. Благодарю. – user2693135

ответ

0

Передача правильного контроллера на @WebMvcTest решила проблему. Отредактированный код после прохождения ProductController.class работает.

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