Java 测试Thymeleaf form/Spring MVC控制器交互的最佳方法
我正在使用Thymeleaf和Spring MVC开发Spring Boot应用程序,我在代码中遇到了一个错误,有人将Spring MVC模型绑定到了两个不同的HTML表单字段:Java 测试Thymeleaf form/Spring MVC控制器交互的最佳方法,java,spring-mvc,testing,thymeleaf,Java,Spring Mvc,Testing,Thymeleaf,我正在使用Thymeleaf和Spring MVC开发Spring Boot应用程序,我在代码中遇到了一个错误,有人将Spring MVC模型绑定到了两个不同的HTML表单字段: <input th:field="*{userModel.name}" type="text" /> <input id="name" th:field="*{userModel.name}" type="hidden" /> 这导致控制器模型中的name字段设置为逗号分隔的值字符串。史蒂夫,
<input th:field="*{userModel.name}" type="text" />
<input id="name" th:field="*{userModel.name}" type="hidden" />
这导致控制器模型中的name字段设置为逗号分隔的值字符串。史蒂夫,比如史蒂夫。我解决了这个问题,但是我想知道为这个编写回归测试的最简单方法。有一个SpringMVC测试框架,我可以使用它,但我真正想要测试的是渲染模板和控制器之间的交互,而不仅仅是控制器
我可以使用硒测试,但我最近读了blikticle?他在信中说:
特别是一个常见的问题是,团队将端到端测试、UI测试和面向客户的测试的概念混为一谈。这些都是正交特性
我认为这是一个伟大的观点。我想写的是UI组件集成?我想是测试。比加载整个页面还小的东西。只测试表单生成和提交的东西
我的另一个想法是,这种bug最好通过静态分析工具捕获,但这超出了我的范围
在这个项目中,我意识到SpringMVC和HTML表单之间的交互是常见的错误,因此有一种方法来测试这些交互是很好的
编辑:
经过进一步考虑,我认为以下是我在测试中需要的步骤:
从模板的thymeleaf模板中选择标记并渲染它,在模型上传递适当的数据
可能以编程方式编辑来自Java的呈现表单值,以模拟JavaScript交互。
基于呈现的表单生成浏览器的http POST请求。
使用Spring用于将POST请求转换为控制器的模型参数的任何内容
要么调用控制器并验证结果,要么断言模型创建正确
我想我可以使用Thymeleaf的片段选择器,或者将我的表单重构成一个单独的模板。2我可以轻松地使用JSoup。我不知道该怎么办,现在是3点和4点。3根据HttpServletRequest模拟的工作方式,我可能能够自己编写。似乎它必须在春天的某个地方上市,但我对春天还不熟悉
更新:
查看作为4的可能解决方案。我认为您应该测试功能,并获得控制器直接调用控制器的良好路径覆盖,模拟底层服务。然后可以测试模型是否正确填充 您可以使用Thymeleaf测试基础结构测试复杂模板
然而,归根结底,一切都必须齐头并进。这个测试应该使用selenium来完成,以检查变量名是否匹配,以便回归。通常,您只需要对每个页面进行一些测试。如果你有很多JS,你应该用buster.JS测试复杂的JS功能。selenium的htmlunitdriver非常快,所以我认为性能应该不是什么大问题。但是不要用selenium测试所有的控制器或服务路径。几年后,看起来您现在可以使用HtmlUnit/SpringMVC测试集成来完成我想要的工作。它将简化您对控制器的任何调用,并使用MockMVC,而不使用Servlet容器 因此,您可以利用html智能客户端库的优势,像浏览器一样包装前端,而不需要servlet容器的开销,并且能够在控制器下模拟您想要的任何内容
我已经看过了Thymeleaf测试项目,并且。另外,我知道端到端测试也有自己的位置,但我正在特别寻找一种方法来隔离和测试Thymeleaf/Spring MVC表单绑定