程序员的测试课
郑晔
开源项目 Moco 作者
18911 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 23 讲
加餐 (1讲)
结束语 (1讲)
程序员的测试课
15
15
1.0x
00:00/00:00
登录|注册

12 | 实战:将 ToDo 应用扩展为一个 REST 服务

你好,我是郑晔!
经过了基础篇的介绍,相信你已经对在日常开发中测试应该做到什么程度有了一个初步的认识。有了基础固然好,但对于很多人来说,面对常见的场景还是不知道如何下手。在接下来的应用篇中,我们就用一些开发中常见的场景,给你具体介绍一下怎么样把我们学到的知识应用起来。
在后端开发中,最常见的一种情况就是开发一个 REST 服务,将数据写到数据库里面,也就是传说中的 CRUD 操作。这一讲,我们就把前面已经写好的 ToDo 应用扩展一下,让它变成一个 REST 服务。

扩展前的准备

具体动手写任何代码之前,我们先要搞清楚我们要把这个应用改造成什么样子。把 ToDo 应用扩展为一个 REST 服务也就是说,原来本地的操作现在要以 REST 服务的方式提供了。另外,在这次改造里面,我们还会把原来基于文件的 Repository 改写成基于数据库的 Repository,这样,就和大多数人在实际的项目中遇到的情况是类似的了。
有人可能会想,既然是 REST 服务,那是不是要考虑多用户之类的场景。你可以暂时把它理解成一个本地运行的服务(也就是说只有你一个人在使用),所以我们可以不考虑多用户的情况。这样做可以让我们把注意力更多放在测试本身上,而增加更多的能力是需求实现的事情,你可以在后面拿这个项目练手时,做更多的尝试。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何将一个 ToDo 应用扩展为一个 REST 服务,并重点讨论了技术选型、实现过程和测试方法。作者首先讨论了将应用改造成 REST 服务的需求目标,并提到了将基于文件的 Repository 改写成基于数据库的 Repository。选择了 MySQL 和 Spring Data JPA 作为数据访问技术,并对两者进行了比较。在数据库迁移方面,作者提到了使用迁移脚本来管理数据库变更,并展示了创建表和实体的示例。在数据库相关的测试部分,作者介绍了如何使用 Spring 提供的支持进行集成测试,以及如何编写测试代码来验证数据库相关的内容。在设计 RESTful API 部分,作者详细讨论了如何根据应用提供的能力设计相应的接口,并给出了添加、完成和查询 Todo 项的具体设计方案。通过展示测试代码,读者可以了解如何利用 Spring Data JPA 和 MockMVC 进行集成测试,以及如何设计测试用例来覆盖不同的场景。整体而言,本文为读者提供了扩展应用为 REST 服务的全面指导,使读者能够快速了解并掌握相关技术和实践经验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的测试课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 闻人
    文中外部对象转为内部对象的实现有必要放到单独的类里吗,减少两个对象的依赖

    作者回复: 简单地说,业务核心的代码不应该依赖于外部的请求,所以,外部请求对象不应该直接传到业务核心里面。 如果你想看更多的解释,可以去阅读《代码之丑》的第 11 讲。

    2021-08-30
    3
    2
  • chon
    集成restful的例子写的挺好的,如何处理dubbo的呢?后续章节能否给个完整的例子?谢谢

    作者回复: 没有 dubbo 的东西,因为 dubbo 只是一个特定的程序库,不具备普遍适用的特点。 关于如何处理特定的程序库,在 11、12 和 14 讲已经讨论了很多,简言之,就是把它从业务中隔离出去,把它作为一个集成点。如果能有 Mock 的方案就用 Mock 的方案,不能的话,可以放到系统测试里面去测。

    2021-09-08
    1
  • 不二先生
    郑老师,你好: 有一个问题想请教下。 MockMVC 创建的模拟网络环境可以连接到数据库?这个数据库是本地的吗?

    作者回复: MockMVC只是网络环境,与数据库无关,是否连接数据库是我们自己的事,可以连,也可以不连,在第14讲,我们可以看到具体怎么做。

    2021-09-02
    1
  • Fredo
    老师你好 ,更新了一下ToDo项目 build无法通过了,task migrateToDev 这里是不还有漏了啥没上传的

    作者回复: 需要你在本地的MySQL中创建数据库,这是第14讲的内容。

    2021-08-31
    1
  • 大碗
    有几个问题请教下老师: 1, 参数校验的逻辑在core层也有,算不算重复?现在写在的api里,能否移动到request的构造函数里面判断,然后抛出全局异常再返回BadRequest?实际业务一个add有好几个字段要check,写起来api的函数就好长了 2,测试接口的时候,构造request的使用的字符串json,为什么不用new对象再用工具toJsonString,手打json字符串容易出错 3,测试的数据库用了mysql的一个test库,不用h2是基于什么考虑呢

    作者回复: 1. 不算,它俩校验参数是分别针对自己的目标。这就像你不应该担心第三方程序库里所做的校验一样。api里的代码处理的就是与Spring接口的部分,放到Request里面会造成过多的代码与这些框架产生耦合。 2. 可以,我这里因为它简单,就直接写了。 3. 你可以看看第14讲

    2021-08-31
    1
  • sylan215
    本节是一个实例验证把一个应用扩展为 REST 服务(自查下具体的意思)。 因为是基于 Java 语言的,所以里面提到很多 Java 的工具,这部分不会,所以不是特别懂,但是大概意思是知道的,几个关键点: 1、接口服务要遵循 RESTful 规范(统一规范对测试来说也意义重大); 2、接口如果涉及对数据的操作,测试完之后尽量要进行清场操作,避免垃圾数据残留(数据构造也是测试的一大难点); 3、本次演示还是遵循接口测试的原则,不涉及接口实现的覆盖;
    2021-09-16
    4
  • ifelse
    集成测试回滚数据,保证测试的可重复性。--记下来 Springboot很方便
    2022-06-11
    1
  • Geek_3b1096
    ...而不仅仅是围绕着前端需求去做... 期待老师推出API设计课
    2021-09-08
    1
  • 一打七
    没有理解为什么用构造函数的方式进行注入,老师能解答一下吗?谢谢
    2023-02-11归属地:北京
  • 无道win
    如果数据库使用的mybatias有没有类似 @DataJpaTest的注解?
    2022-10-18归属地:上海
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部