单元测试问题请教

2022-10-13 19:35:57 +08:00
 hsuyeung

尝试为 Service 层的方法添加单元测试,写着写着发现方法中需要用到请求头中携带的 token 获取用户信息才可以走完整套逻辑,那我的单元测试应该要怎样才可以模拟出 token 呢?

1628 次点击
所在节点    程序员
15 条回复
lanlanye
2022-10-13 19:38:24 +08:00
写一个验证服务的 Stub ,注入你的服务,代替掉真正的验证服务
retanoj
2022-10-13 19:40:26 +08:00
就各种 mock ,侵入式 mock
chihiro2014
2022-10-13 19:53:13 +08:00
mock token 对象
ihuotui
2022-10-13 20:04:50 +08:00
当为类或者方法写单元测试很难写,代表代码耦合度太高,需要解耦,把不同功能的方法分离,才能写出单元测试,从下往上写。如果下面方法都是正确,那么整体代码正确。
ihuotui
2022-10-13 20:05:21 +08:00
最近写了个单元测试的文章,有点公司内容我修改下发出来。
hsuyeung
2022-10-13 20:05:56 +08:00
@ihuotui 感谢!期待期待
hunterzhang86
2022-10-13 20:22:11 +08:00
carrymaniac
2022-10-13 20:23:26 +08:00
按照我的理解,service 不太应该和请求头这些东西打交道,解析请求头这些操作在 controller 完成。service 的单元测试也就不用考虑解析 token 等事项了。
hunterzhang86
2022-10-13 20:23:27 +08:00
carrymaniac
2022-10-13 20:27:19 +08:00
如果使用的是 springboot mockMVC 的话 可以使用
mockMvc.perform('/xxxx')
.with(csrf())
.with(jwt().jwt(jwt)))
hsuyeung
2022-10-13 20:27:41 +08:00
@carrymaniac 我刚想了下,也是觉得应该这样更好些,使用 mock 局限性太大了(只能去对 controller )做测试
xavierchow
2022-10-13 20:36:12 +08:00
> 刚想了想,我感觉还是应该把“从 token 中获取用户信息”这一操作放到 api 层去处理,然后将用户信息或者其中某些字段作为参数传递到 service 中,service 只处理业务逻辑这样更好些。

对的,这就是写测试代码的好处,促使你重新思考分层 /解耦有么有做好,测试困难很可能代码设计就有坏味道了。
sdot96
2022-10-14 16:42:35 +08:00
一般都有 mock 包,可以针对变量,方法,接口,函数进行 mock ,如果是 golang 可以看下我的文章有详细的关于单元测试的一些思考 https://zhuanlan.zhihu.com/p/565209330

或者你说的将把“从 token 中获取用户信息”这一操作放到 api 层去处理,我感觉这样好像更加合适,因为我倾向能不 mock 就尽量不 mock
ihuotui
2022-10-14 22:41:19 +08:00
https://www.cnblogs.com/ihuotui/p/16793249.html
1 单元测试的效益
2 介绍单元测试
3 编写简单的单元测试
4 好的单元测试(提升)
ihuotui
2022-10-14 22:43:04 +08:00
@hsuyeung
单元测试之道 junit
1 单元测试的效益
2 介绍单元测试
3 编写简单的单元测试
4 好的单元测试(提升)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/886728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX