当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 1.4使用Thymeleaf进行MVC测试导致TemplateProcessingException

萧辰沛
2023-03-14

我正在尝试测试一个Spring Boot 1.4.0.M3 MVC切片。控制器是这样的。

@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";
 }
}

< code>productshow.html百里香模板的最小化视图如下。

<!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)

需要帮助来解决这个问题。提前感谢。

共有1个答案

祁均
2023-03-14

将正确的控制器传递给@WebMvcTest解决了这个问题。传递ProductController.class后编辑的代码正在工作。

 类似资料:
  • 我正在使用和Spy对函数进行单元测试。 这是正在测试的类: 我正在尝试使用Mockito和spy进行测试,因为我不想调用真正的函数只需验证一下即可。该测试称为 这是错误: 我也尝试过这样做,它会导致空指针:

  • 我正在使用Spring的“Spring test mvc”库来测试web控制器。我有一个非常简单的控制器,它返回一个JSON数组。那么在我的测试中我有: 上述测试返回: 为了快速检查我实际得到了什么,我运行了以下测试: 并在 我不确定为什么无法在JSON数组中看到。

  • 我花了相当长的时间试图找出解决我问题的办法,但毫无结果。 无论如何,我有一堆集成测试(在一个与标准测试目录并行的非标准目录testRegression中)。 这些集成测试使用内存数据库中的h2。在生产和测试中,我使用liquibase来模拟模式演变。 我的属性(在应用程序testregion.properties中)如下所示: 我一直得到的错误是: 那么我该如何回避这个问题呢?我的基本理解是,每个

  • 简介 在之前的章节我们实现了一个简单但是功能齐全的web项目、学习了如何使用Gradle来构建和运行这个项目。测试代码是软件开发周期中非常重要的一环,能够确保软件的行为能符合预期。这一章我将讲述如何使用Gradle来组织、配置和执行测试代码,学习如何写单元测试、集成测试和功能测试并把他们集成到项目构建中。 Gradle集成了很多Java和Groovy测试框架,在本章的最后你会用JUnit、Test

  • 本节课将介绍如何使用specs —— 一个Scala行为驱动设计(BDD)框架,来进行测试。 扩展规格 让我们直接开始。 import org.specs._ object ArithmeticSpec extends Specification { "Arithmetic" should { "add two numbers" in { 1 + 1 mustEqual

  • 我正在使用Spring引导 1.3 开发一个 spring 应用程序 我有一个类似这样的MVC请求处理程序: 这是它的集成测试 删除了一些位以留出空间,但请注意顶部的@Transactional注释 它运行和通过没有线: 但是当添加它时,它给出了这个讨厌的异常,这是一个bean验证异常,没有任何数据插入操作(Spring mvc已经处理的验证错误和BindingResault中的结果) 当我在类级