返回介绍

4.2 测试 Web 应用程序

发布于 2025-04-21 21:10:08 字数 1332 浏览 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 节里你会看到如何为运行在应用服务器里的应用程序编写测试。

发布评论

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