TDD 【求解答】TDD 初学者,关于何时需要进行集成测试的疑问

carlson · April 30, 2021 · Last by carlson replied at May 13, 2021 · 52 hits
  • 当前有一个CRUD 的基类,实现了对实体基本的 CRUD(采用了 mapper 的方式进行 DTO 转换 Entity,来达到了通用性),如下图
  • 对于一些简单的业务,通过继承CRUD 的基类,然后重写基类的方法来快速实现业务,如下图

问题:在进行 TDD 的时候,对于继承这些 CRUD 的方法,是否需要进行集成测试?

我纠结的点:因为使用 mapper 进行 DTO 到实体的转换,可能会因为拼写错误而不能保证字段成功映射,所以要测试输入是否成功生效。但是如果仅仅因为这一个原因就进行集成测试,就会出现大量的集成测试,测试看上去也很多重复代码,觉得很多余。

所以想问问各位,这种情况要怎么去实践比较好

谢谢

「软件匠艺社区」旨在传播匠艺精神,通过分享好的「工作方式」,让帮助程序员更加快乐高效地编程!

@carlson 需要写的,但应该针对接口行为去写接口测试,而不是针对 dto mapper , dto mapper 只是其中的一个实现,你一个一个 set 也有可能写错,或者漏写的。

比如:你要写一个添加用户信息接口,包含了用户名、邮箱、性别。。。

1、你的输入是什么?相关用户信息的字段要传过来

2、调用接口执行成功,httpStatus=200,返回用户 id

3、接口执行成功,你需要校验什么?

应该去验证数据库中是否已创建用户信息,存储的信息,是否和你输入中的内容(比如:用户名,邮箱...) 是否一致,是否正确

就像下边这张图一样:

Reply to jinhuisheng

感谢解答。 我这里举例 appservice,是因为项目的 controller 层非常薄,仅仅是对 service 层的一个转发。如下图:

还有一个问题,就是对这些基本的 crud 进行集成测试的时候,对于测试数据的准备很繁琐,一段时间以后再去看测试就会感觉测试代码很乱,这种应该怎么去处理和优化。如下图

@carlson 1、如果你的测试方法逻辑确实需要这么多的准备数据,那就要去准备呀,可以参考下这个: https://www.codingstyle.cn/topics/175#%E6%B5%8B%E8%AF%95%E4%BB%A3%E7%A0%81%E7%9A%84%E9%87%8D%E6%9E%84

2、准备的数据太多,也有可能是你这个接口做的事情太多了,单一职责,命令和查询分离,你这个接口是创建一个异步任务,但它却返回了很多数据,它把命令和查询的操作都做了,这个数据是不是可以通过查询接口再去获取呢

Reply to jinhuisheng

感谢解答,又有了新的收获,谢谢。

carlson closed this topic. 13 May 15:56
You need to Sign in before reply, if you don't have an account, please Sign up first.