本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

如果有一个Spring MVC项目,那么我们的测试一般有两种,一种是单元测试,第二种是端对端测试。

单元测试可以选用Spring MVC Test框架,当然也可以当作一般的单元测试不使用SpringJUnit4ClassRunner来运行。

而端对端测试一般是起一个服务,然后使用测试框架启动一个浏览器来测试。这两者相互结合倒也融洽。

整个Spring项目最近多了一个新的项目,提供了一种介于其中的测试支持。

Spring Test Htmlunit

这个项目是Spring原有测试框架和HtmlUnit的一个结合。

主要在于解决以下三个问题:

集成常见的测试工具同时不启动服务器(当作单元测试对待)

支持Javascript

可以Mock一些组件来加快测试

先来看看原有的单元测试框架是如何测试的

MockHttpServletRequestBuilder retrieveProfile = post("/profile/")

.param("userid","1"));

mockMvc.perform(retrieveProfile)

.andExpect(status().isOk());

当然测试中还可以去测试Model。如果需要测试页面渲染,就需要借助xpath了。

mockMvc.perform(get("/profile/create"))

.andExpect(xpath("//input[@name='name']").exists())

.andExpect(xpath("//textarea[@name='introduction']").exists());

但是页面的交互是很负责,所以更多部分的测试是在端对端中。

示例

来看看新的工具是怎样解决问题的。

首先创建一个WebClient

WebClient webClient;

@Before

publicvoidsetup() {

webClient = MockMvcWebClientBuilder

.webAppContextSetup(context

.contextPath("")

.createWebClient();

}

然后直接使用WebClient去操作

HtmlForm form = createMsgFormPage.getHtmlElementById("profile");

HtmlTextInput summaryInput = createMsgFormPage.getHtmlElementById("name");

summaryInput.setValueAttribute("Spring");

HtmlTextArea textInput = createMsgFormPage.getHtmlElementById("introduction");

textInput.setText("Do you know Spring?");

HtmlSubmitInput submit = form.getOneHtmlElementByAttribute("input","type","submit");

HtmlPage newProfile = submit.click();

WebDriver

HtmlUnit的API稍微有点繁琐,如果你习惯了Selenium的使用,那么可以考虑使用WebDriver。

WebDriver driver;

@Before

publicvoidsetup() {

driver = MockMvcHtmlUnitDriverBuilder

.webAppContextSetup(context)

.createDriver();

}

当然,依照惯例还是搭配Page Object Pattern使用。

创建相关的页面对象

publicclass CreateProfilePage

extendsAbstractPage {

private WebElement name;

private WebElement introduction;

@FindBy(css ="input[type=submit]")

private WebElement submit;

publicCreateMessagePage(WebDriver driver) {

super(driver);

}

public TcreateMessage(Class resultPage, String name, String introduction) {

this.name.sendKeys(name);

this.introduction.sendKeys(introduction);

this.submit.click();

return PageFactory.initElements(driver, resultPage);

}

publicstatic CreateMessagePageto(WebDriver driver) {

get(driver,"/profile/create");

return PageFactory.initElements(driver, CreateProfilePage.class);

}

}

其他支持

该工具还支持Geb,虽然我没有使用过它,但是从文件上看确实简约了不少。

目前该项目还没有正式释出,最新版本是1.0.0.BUILD-SNAPSHOT,可以在Spring的快照库中找到。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

mvc html安全检测,Spring MVC和HtmlUnit测试相关推荐

  1. Java Spring MVC框架 VIII 之 Spring MVC拦截器

    Java Spring MVC框架 VIII 之 Spring MVC拦截器 Spring MVC拦截器 1.拦截器简介 拦截器是SpringMvc框架提供的功能 它可以在控制器方法运行之前或运行之后 ...

  2. [Java,MVC] Eclipse下搭建Spring MVC

    转自:http://blog.csdn.net/blue_jjw/article/details/8752466 一.新建Dynamic Web Project 一个web工程最基本的,只看3个地方, ...

  3. SpringMVC简介-传统的Model1和Model2/MVC思想及其优势/Spring MVC的优势

    Spring MVC+Spring+Mybatis,简称SSM. MVC思想概述 传统的Model1和Model2 在Model1模式下,整个web应用几乎全部由JSP页面组成.Model1模式的实现 ...

  4. spring mvc 渲染html,在Spring MVC中使用Thymeleaf模板渲染Web视图

    Thymeleaf模板是原生的,不依赖于标签库.它能在接受原始HTML的地方进行编辑和渲染.由于没有与Servlet规范耦合,因此Thymeleaf模板能够进入JSP所无法涉及的领域 如果想要在Spr ...

  5. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  6. spring mvc使用html页面,Spring MVC静态页面

    以下示例显示如何使用Spring MVC Framework编写一个简单的基于Web的应用程序,它可以使用标记访问静态页面和动态页面.首先使用Eclipse IDE创建一个动态WEB项目,并按照以下步 ...

  7. java中MVC原理详解,Spring MVC 原理总结

    1. 什么是MVC? MVC是一种架构模式 --- 程序分层,分工合作,既相互独立,又协同工作 MVC是一种思考方式 --- 需要将什么信息展示给用户? 如何布局? 调用哪些业务逻辑? MVC流程图如 ...

  8. spring mvc 小结-51cto学院Spring MVC

    一.Spring MVC 基础 Spring mvc 框架 是一个MVC框架,通过实现MVC很好地将数据.业务.展现进行分离,其底层仍然是servlet 要在web.xml 中配置servlet Sp ...

  9. 简单的Spring MVC入门程序,对于Spring mvc工作流程的理解,servlet标签和servlet-mapping 理解,视图解析器

    javaweb SpringMvc的组成:jsp,JavaBean,servlet 可以使用Spring所提供的功能 提供了前端控制器DispatcherServlet,不需要细化Servlet 执行 ...

最新文章

  1. nagios全攻略(一)----准备阶段
  2. 史上最全亚历山大大帝名言
  3. geotools等值线生成
  4. windows安装numpy库
  5. H5安卓下载以及IOS跳转AppStore下载App
  6. 饥荒插件制作应注意的几个问题
  7. linux系统教程_【笔记】windows10安装linux双系统教程(可能是现今最简单方法)...
  8. 测试管理工具之禅道的使用
  9. 对于CNN卷积神经网络的前向传播和反向传播的理解
  10. linux rapidio测试,Linux 下RapidIO 子系统的分析与实现.pdf
  11. java多线程模拟购买火车票
  12. 微信、QQ等即时通信软件为什么没有取代电子邮件?
  13. 禁止VMware虚拟机与Host的时间同步
  14. [附源码]Java计算机毕业设计SSM广东理工学院大学生社团管理系统
  15. cacti自定义95计费模板
  16. “真实的了解,真挚的关爱” 全国助残日活动
  17. AWS-基础架构自动化的编排工具-AWS CDK介绍
  18. java office web apps_Office Web Apps正式向全球免费开放!
  19. 从零构建一个微信小程序
  20. 【面试题】 17.07. 婴儿名字

热门文章

  1. 智慧城市发展路径中 中国特色是主色调
  2. 关于 MySQL 8.0 新特性“隐藏索引”的一点思考
  3. Cisco基本必须掌握命令
  4. matlab imadjust将暗图像分别在RGB与HSV域增加亮度
  5. 华为机试HJ73:计算日期到天数转换
  6. 解决方案-CMake error: error in configuration process, project files may be invalid(WindowsVS可参考)
  7. linux wegt克隆网站,linux利用wget命令备份网站(镜像拷贝)
  8. 【接口测试】接口和接口文档概念
  9. 关于自动化测试,你真的懂嘛?
  10. python好用 appium fiddler_python3 爬虫实战:mitmproxy 对接 python 下载抖音小视频