16 | 怎么在遗留系统上写测试?

2021-09-08 郑晔
《程序员的测试课》
课程介绍


讲述:郑晔

时长:大小10.67M


你好,我是郑晔!
迄今为止,我们讨论的话题主要是围绕着如何在一个新项目上写测试。但在真实世界中,很多人更有可能面对的是一个问题重重的遗留系统。相比于新项目,在一个遗留系统上,无论是写代码还是写测试,都是一件有难度的事。
在讨论如何在遗留系统上写测试前,我们首先要弄清楚一件事:什么样的系统算是遗留系统。在各种遗留系统的定义中,Michael Feathers 在《修改代码的艺术》(Working Effectively with Legacy Code)中给出的定义让我印象最为深刻——遗留系统就是没有测试的系统。
根据这个定义你会发现,即便是新写出来的系统,因为没有测试,它就是遗留系统。由此可见测试同遗留系统之间关系之密切。想要让一个遗留系统转变成为一个正常的系统,关键点就是写测试。

给遗留系统写测试

众所周知,给遗留系统写测试是一件很困难的事情。但你有没有想过,为什么给遗留系统写测试很困难呢?

展开全文
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。

精选留言

  • 大碗
    2021-09-08
    如果新加一个订单完成的业务,需要发布带订单orderId,finishedTime的订单完成事件,也是在sender里面加这个方法么?怎么设计会更好呢

    作者回复: 一种做法是定义一个模型叫事件,不同的地方发出不同的事件,至于 orderId、finishedTime,就是事件的参数。这样,sender 有一个接口就够了。

    
    3
  • UncleNo2
    2021-12-03
    一顿操作猛如虎,如此顺滑,舒适感爆棚
    
    2
  • sylan215
    2021-09-16
    提取独立接口确实是个好办法,和这个类似的,还有提取同类项的做法,就是同一份代码被不同地方进行了拷贝,也是可以改为统一调用,让逻辑更清晰。 现实中对于老代码的维护,大部分碰到的困境是,因为需求,需要修改老代码,修改之后没法确认影响范围,就算做了单元测试,系统测试层面为了保险起见,也是要进行大面积的回归,这时候要是没有自动化,就很惨了,从这个角度说,好的代码设计和实现,就是好的测试。
    
    1
  • 阿姆斯壮
    2021-09-08
    工作大多数场景是界面编程。想咨询一下校长,自己总感觉界面这块有点无法套进单元测试里面。也不知道那里欠缺了。

    作者回复: 现在的前端都有特定的框架支持了,比如,Selenium/Webdriver 测试前端界面,支持模拟界面上的操作,移动端也有对应的框架。不过,一般来说,前端一定要把逻辑和前端界面分开。这种框架对前端界面的支持,属于集成测试的范畴,而单元测试主要以测业务逻辑为主。

    共 2 条评论
    2
  • 闻人
    2021-09-08
    要让项目易于测试,写代码要注重隔离,实现与接口隔离,业务与外部组件隔离 #收纳盒 #极客时间

    作者回复: 其实就是做好设计

    
    1
  • 独孤九剑
    2021-10-21
    “业务”是相对稳定的,依赖的“具体实现”是易变的,因此“解耦”是最佳实践。IDE提供的“3个提取”式重构功能是极好的。
    
    
  • 刘大明
    2021-09-17
    郑大,有个问题请教一下,如果每次重构的时候发现需要提取一些类,怎么将这些单独提取出来的方法放在合适的位子呢。比方说有一块重复代码需要提取出一个公共方法,这时候需要引用一个新的类,怎么知道这个类具体的名字,目前就是不管什么都放到factory里面。

    作者回复: 这其实就是一个构建模型的过程,取什么名字就是根据这段代码在做的事情,创建就是 Factory,发送就是 Sender,接受就是 Receiver,连接就是 Connector,如此而已。

    
    
  • Geek_3b1096
    2021-09-12
    周五就遇到只有具体KafkaProducer没有接口没有测试

    作者回复: 现学现卖,幸福

    
    