什么TDD,让它见鬼去吧!

本文描述了在使用TDD(Test-DrivenDevelopment)过程中,开发者张大胖遇到的问题,如处理XML参数、模拟依赖的Service、数据库操作等,展示了TDD在老旧应用和复杂架构中的实际挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个逻辑极其简单,就不用重构了。直接写下一个测试用例, 测试两个数字相减的行为。这样周而复始下去,直到所有功能都完成。

小王撇撇嘴:这就是TDD? 太没技术含量了,我明天就在项目中尝试一把!

####2

第二天,张大胖看了一下自己的任务列表,里边有这么一个需求:

在下订单的时候,根据订单的金额,扣除优惠券,按照规则给用户增加相应积分

小王看了看这个计算规则,非常简单,估计一个函数就能搞定。

好,就拿你来试一试TDD这把刀吧,看看TDD到底有没有那么好,或者那么差。

第一步,先写一个失败的测试!

小王心中非常清楚,这个系统用的是Spring,典型的Controller -> Service -> DAO。

在Controller中根本没有逻辑,就是调用Service而已。所以直接对Service层写单元测试吧, 张大胖很快就定位到这个新需求相关的类, 即OrderService的submit方法。

TDD本来是要驱动出接口的,现在看来不用了,已经存在了,张大胖看了一下接口的输入输出:

public class Calculator{
public int add(int a, int b){
return a + b;
}
}

这个方法的输入参数居然是一个XML字符串! 其中包含了像couponID,  addressID这样的东西。

..... xxxx xxxx xxxx ......

返回值也是一个XML字符串, 表示成功或者失败(以及对应的失败消息)。

xxxx xxxx

这年头还用XML做参数,只能说这是一个老应用了!

####3

按照TDD的节奏, 张大胖写下第一个测试用例,并且让它失败。

public void OrderServiceTest{
public void testBonusPoints(){
String requestBody= …;
//执行submit方法
String result = orderService.submit( requestBody);
?? 验证积分, 可是怎么验证??
}
}

等一下,这个测试的输入参数容易构建,但是submit方法的返回值中根本就不会包含积分信息!那怎么才能我计算出的积分是正确的?

难道让submit方法返回积分数据?那就修改了本来是通用的接口协议,太不像话了!

第二个问题也很快浮现,积分计算的逻辑很简单,但是需要订单总金额和优惠券这两个信息,可是在测试用例中,这两个信息从哪里来?

订单总金额需要购物车,这是在数据库存放的,优惠券ID在submit方法的参数中,详情也在数据库中。

积分的计算这么简单,难道我还得先在数据库中创建一个购物车和优惠券,然后通过ShopCartService和CouponService从数据库读出来?这也太变态了吧?

不,单元测试一定要避开数据库,必须得用Mock的方式吧,张大胖知道一个Mock框架叫Mockito,挺好用的,就用它了。

张大胖又浏览了一下OrderService.submit这个长达2000多行的函数,这一看不打紧,张大胖发现这个函数依赖了另外七八个Service:  UserService, ShopCartService, CouponService …

这几个Service有的严重依赖数据库, 有的严重依赖Http ,有的依赖消息队列。

也就是说要想让submit方法顺利执行,必须得把这七八个Service都Mock出来,让它们能协调工作,例如:

给一个userID,就能返回一个正确的user对象。

给一个couponID,就能返回一个正确的coupon对象。

Mockito能实现这个功能,但是协调七八个个Service的相关对象,需要写出大量代码才行!测试用例中的代码会变得非常复杂、非常脆弱。

张大胖傻眼了 !自己连一个测试用例都写不出来,还搞什么TDD?

####4

张大胖叹了一口气, 放弃了写测试用例的想法, 在OrderService.submit方法中,找到了合适的地方,然后根据订单金额和优惠券信息,写了几十行代码,把积分计算了出来,保存到数据库中。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

要如何成为Android架构师?

搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。
大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的Android架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;

对应这份技术大纲,我也整理了一套Android高级架构师完整系列的视频教程,主要针对3-5年Android开发经验以上,需要往高级架构师层次学习提升的同学,希望能帮你突破瓶颈,跳槽进大厂;

最后我必须强调几点:

1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。

你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

次。

你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值