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

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

周学义
2023-03-14

我正在使用Thymeleaf开发Spring Boot应用程序

<input th:field="*{userModel.name}" type="text" />
<input id="name" th:field="*{userModel.name}" type="hidden" />

这导致控制器html" target="_blank">模型中的名称字段被设置为一串逗号分隔的值。例如“史蒂夫,史蒂夫”。我解决了这个问题,但我想知道为此编写回归测试的最简单方法。有一个Spring MVC测试框架,我可以在这篇博客文章中使用,但我真正想测试的是呈现的模板和控制器之间的交互,而不仅仅是控制器。

我可以使用硒测试,但我最近读了这篇Martin Fowler bliki/文章(blikticle?)他在信中说:

特别是一个常见的问题是团队将端到端测试、UI测试和面向客户的测试的概念混为一谈。这些都是正交的特征。

我认为这是一个很好的观点。我想写的是一个UI组件(集成?)我想是测试。比加载整个页面还小的东西。一些只测试表单生成和提交的东西。

我的另一个想法是,这种错误最好通过静态分析工具来捕获,但这有点超出了我的范围。

在这个项目中,我意识到Spring MVC和HTML表单之间的交互是一个常见的错误地方,因此最好有一种方法来测试这些交互。

编辑:

进一步考虑后,我认为这些是我在测试中想要的步骤:

  1. 选择<代码>

我想我可以用Thymeleaf的片段选择器来做#1,或者把我的表单重构成一个单独的模板#2我可以轻松地使用JSoup。现在是#3

更新:

将WebDataBinder视为#4的可能解决方案。

共有2个答案

裴泰平
2023-03-14

我认为您应该测试功能,并获得直接调用控制器的控制器的良好路径覆盖率,模拟底层服务。然后可以测试模型是否正确填充。

您可以使用Thymeleaf测试基础架构测试复杂的模板。

然而,归根结底,一切都必须协同工作。这个测试应该用selenium来完成,以检查变量名是否匹配(所以你的回归)。通常你只需要对每个页面进行几次测试。如果你有很多JS,你应该用buster.js.selenium的htmlunit驱动程序非常快,所以我认为性能应该不是一个大问题。但是不要用selenium测试所有的控制器或服务路径。

宇文元明
2023-03-14

几年后,看起来您现在可以使用HtmlUnit/SpringMVC测试集成实现我想要的功能了。它将简化您对控制器的任何调用,并使用MockMVC,而不使用Servlet容器。

因此,您可以利用html智能客户端库像浏览器一样包装前端,而无需servlet容器的开销,并且能够在控制器下模拟您想要的任何内容。

https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-mvc测试服务器htmlunit

 类似资料:
  • 交换机与控制器交互 我们可以启动一个简单的控制器,默认没有任何流表项,仅仅作为一台带学习功能的交换机。控制器默认监听端口是 6633。 以下控制器与交换机之间的消息交互过程,可以通过 wireshark,配置 of 过滤器观察到交换机跟控制器之间的交互消息。 参见下面的表格。 消息 类型 描述 Hello Controller->Switch 跟着 TCP 握手,控制器发送它的版本号到交换机。 H

  • 由于A-Frame能支持各种平台、设备和输入方法。与2D网页不同,虚拟现实的交互方式是无限的。对于电脑、平板和手机,我们只需要考虑鼠标和 触摸输入,对于Cardboard,我们只需要考虑单个按钮,而对于更为复杂的VR设备,我们可以做任何事情:抓、扔、擦、转、戳、伸、压等等动作,就像人在现实世界中一样。 更进一步,混合现实中的跟踪和自定义控制器甚至提供了超出现实的交互方式! 我们在本节中可以做的是过

  • 英文原文:http://emberjs.com/guides/testing/testing-controllers/ 单元测试方案和计算属性与之前单元测试基础中说明的相同,因为Ember.Controller集成自Ember.Object。 针对控制器的单元测试使用ember-qunit框架的moduleFor来做使这一切变得非常简单。 测试控制器操作 下面给出一个PostsController

  • 英文原文:http://emberjs.com/guides/testing/testing-user-interaction/ 几乎所有的测试都有访问路由的一种固有模式,就是与页面进行交互(通过助手),然后检测期待的改变是否在DOM中发生。 例如: 1 2 3 4 5 6 test('root lists first page of posts', function(){ visit('/

  • CRUD代表创建,读取,更新,删除。这是四种方法(如果区分查看一个记录和查看所有记录,则是五种方法)。在Rails中,处理CRUD的规范方法似乎包括七种方法。例如,使用 速记法为Order对象创建路由会生成以下七条路由: 这就是我困惑的根源。为 和 设置单独的操作/路由有什么意义?使用单独的操作查看页面和在数据库中创建记录有什么好处?我理解它是如何在Rails中实现的,例如: 在使用Rails之前

  • 我一直在尝试使用: 使用此链接: 但我有一个错误: 当我换成: 是工作。我能做些什么来和日期一起工作? 谢啦