06|TDD中的测试(2):行为验证为什么应该尽量避免使用?

2022-03-22 徐昊
《徐昊·TDD 项目实战 70 讲》
课程介绍


讲述:徐昊

时长:大小8.77M


你好,我是徐昊。今天我们来继续学习测试驱动开发中的测试。
上节课我们介绍了测试的基础结构——四阶段测试。也就是将每个测试都看作四个依次执行的阶段:初始化、执行测试、验证结果和复原。并且,我们着重介绍了该如何使用状态验证来验证测试的结果。那么这节课,我们将介绍另一种验证方式——行为验证。以及为什么你应该尽量避免使用它。

验证结果——行为验证

行为验证是指通过待测系统与依赖组件(Depended On Component)的交互,来判断待测系统是否满足需求的验证方式。其验证方式如下图所示:
行为验证背后的逻辑是,状态的改变是由交互引起的。如果所有的交互都正确,那么就可以推断最终的状态也不会错。例如,对于如下的代码:
in...

展开全文
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。

精选留言

  • 邓志国
    2022-03-22
    对一些第三方系统的使用,比如发送短信。我可能只需要关心短信发送这个动作是否被调用了,那么这个时候Mock发短信的动作我觉得是可以的。

    作者回复: good

    
    6
  • 程序袁帅
    2022-04-05
    我之前把《Mock 不是 Stub》这篇文章翻译成了中文,分享给大家: https://www.yuque.com/yuanshenjian/agile/mocks-are-not-stubs 这篇文章有点长,但仔细读两遍,会有很多收获,可以作为CTO专栏的很好补充
    
    2
  • 老狗
    2022-04-05
    对于进程间的依赖,我们能fake的尽量用fake,诸如用h2 fake数据库,用wireMock去fake一个其他服务或者三方服务(其他业务服务诸如订单服务、用户服务等,三方功能诸如支付、邮件、短信等),但是但是有些集成方式,fake成本较高,(比如消息队列或者进程间RPC)而且集成协议较稳定,验证的性价比不高时,采用行为验证
    
    
  • Numbpad1
    2022-03-26
    第一次明白了行为测试和状态测试的区别,赞!!!
    
    
  • 阿崔cxr
    2022-03-23
    找到程序的边界,对于那些非自己程序的逻辑,比如第三方库,就可以 mock 掉。也就是使用行为测试

    作者回复: 那为啥不fake

    
    
  • Adoy
    2022-03-22
    对于想OptionParser这样设计成Inverse of Control风格的API,mock一个parser来做行为验证比较合理。类似的前端onClick,onChange这样的API,行为验证的测试实现起来更简单直观,也不影响组建内部的重构。

    作者回复: 你可以试试

    
    
  • 邓志国
    2022-03-22
    如果我的业务逻辑依赖于一个Repository接口,我用内存实现了一个这样的接口。比如测试一个新增后,我会去这个Repository内存实现中查找到新增的对象。这样的测试替身算是行为验证还是状态验证?

    作者回复: 状态验证

    
    