返回介绍

4.2 测试 Web 应用程序

发布于 2025-04-21 21:10:08 字数 1332 浏览 0 评论 0 收藏 0

Spring MVC 有一个优点:它的编程模型是围绕 POJO 展开的,在 POJO 上添加注解,声明如何处理 Web 请求。这种编程模型不仅简单,还让你能像对待应用程序中的其他组件一样对待这些控制器。你还可以针对这些控制器编写测试,就像测试 POJO 一样。

举例来说,考虑 ReadingListController 里的 addToReadingList() 方法:

@RequestMapping(method=RequestMethod.POST)
public String addToReadingList(Book book) {
  book.setReader(reader);
  readingListRepository.save(book);
  return "redirect:/readingList";
}

如果忽略 @RequestMapping 注解,你得到的就是一个相当基础的 Java 方法。你立马就能想到这样一个测试,提供一个 ReadingListRepository 的模拟实现,直接调用 addToReadingList() ,判断返回值并验证对 ReadingListRepositorysave() 方法有过调用。

该测试的问题在于,它仅仅测试了方法本身,当然,这要比没有测试好一点。然而,它没有测试该方法处理/readingList 的 POST 请求的情况,也没有测试表单域绑定到 Book 参数的情况。虽然你可以判断返回的 String 包含特定值,但没法明确测试请求在方法处理完之后是否真的会重定向到/readingList。

要恰当地测试一个 Web 应用程序,你需要投入一些实际的 HTTP 请求,确认它能正确地处理那些请求。幸运的是,Spring Boot 开发者有两个可选的方案能实现这类测试。

  • Spring Mock MVC:能在一个近似真实的模拟 Servlet 容器里测试控制器,而不用实际启动应用服务器。

  • Web 集成测试:在嵌入式 Servlet 容器(比如 Tomcat 或 Jetty)里启动应用程序,在真正的应用服务器里执行测试。

这两种方法各有利弊。很明显,启动一个应用服务器会比模拟 Servlet 容器要慢一些,但毫无疑问基于服务器的测试会更接近真实环境,更接近部署到生产环境运行的情况。

接下来,你会看到如何使用 Spring Mock MVC 测试框架来测试 Web 应用程序。然后,在 4.3 节里你会看到如何为运行在应用服务器里的应用程序编写测试。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。