Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试Thymeleaf form/Spring MVC控制器交互的最佳方法_Java_Spring Mvc_Testing_Thymeleaf - Fatal编程技术网

Java 测试Thymeleaf form/Spring MVC控制器交互的最佳方法

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字段设置为逗号分隔的值字符串。史蒂夫,

我正在使用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字段设置为逗号分隔的值字符串。史蒂夫,比如史蒂夫。我解决了这个问题,但是我想知道为这个编写回归测试的最简单方法。有一个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表单绑定