• sylan215
    2021-08-18
    1、这一讲主要是讲 Mock 的,对于自动化测试来说,这个技术确实很关键,当然,老师也在文中建议慎用,使用的前提是,我们真的明白这些技术的作用和副作用。 2、前一讲说了测试要减少耦合性,同时我们为了保证测试目的的唯一性,就引入了 Mock 技术,它一定程度上,让我们的关注点更集中; 3、和 Mock 技术类似,我们还可以了解 Stub、Dummy、Fake、Spy 等技术,同样是帮忙我们优化测试目的,简化测试实现的; 4、Mock 等模拟对象,可以让我们方便的模拟传参和不同返回值的情况,这些如果是在实际业务环境中,构造起来可能会非常麻烦; 5、非测试目的的过程中的 verify 要慎用,避免降低用例的适用性,也会增加用例的维护成本; 以上,期待后续的精彩内容。

    作者回复: 多谢你的总结!

    
    7
  • return
    2021-08-20
    请教一下老师, 把第三方mock掉了, 那么如何验证 我们请求第三方的参数是否正确, 我们到第三方的请求是否可以正常运行。

    作者回复: 严格地说,第三方是否正常运行,这事不属于测试。如果采用测试的方式,第三方服务有一天宕机了,你的测试失败了,但你根本就没有动代码。所以,它无法起到测试应有的作用。所以,你真正需要的是一个监控程序,而不是一个测试。 当然,为了让人们注意到第三方服务的正确性,你专门做一个“测试”集合,在持续集成的服务以更长的周期运行,而不需要像普通的测试一样,每次提交都运行。

    共 4 条评论
    5
  • 阿姆斯壮
    2021-08-18
    今天又忍不住上来分享一下。把郑大之前的课程应用到工作之后。先从「坏味道」入手,利用函数式编程消除大量重复代码。不做CVS程序员。当工作和学习充分结合起来后,发现每天的工作都充满了乐趣。总感觉工作时间好快。(一天7个小时)不需要加班。可能我们公司是一个不务正业的IT公司。接下来,就是期待郑大的测试课。把自动化测试这块也应用到工作中。

    作者回复: 加油,向高水平程序员进军!

    
    5
  • grandgraph
    2021-08-18
    如果存在多层, 那么每层对下层依赖的对象都需要做Stub/Mock吗? 比如AggregateService依赖多个Service对象, 而各个Service对象又有自己的Repository, 那么在测试AggregateService时, 需要对各个Service对象做Mock吗?

    作者回复: 按照你的逻辑,测试这个聚合服务就是要对其依赖的服务做Mock。这和单独的服务是否依赖于Repository没关系

    共 2 条评论
    4
  • 下弦の月
    2021-08-18
    是否可以这么理解? 有个待测的组件A,内部依赖组建B,会执行B.callFunc(); 同时,B还依赖于组建C,会执行 C.callMethod(); 对A做单元测试的时候,我们需要隔离对B的依赖。Stub 做的事情是模拟一个B对象,设置好模拟B对象的 callFunc() 这个方法的输入与输出即可。 而Mock,除了上述的安排好输入与输出之外,还要对B.callFunc() 这个方法本身的行为做校验。比如verify(C,atLeast(1)).callMethod(any()); 总结下来就是:如果只是准备一个被模拟对象的输入输出,就是Stub;如果要检查被模拟对象内部的行为,就是Mock。

    作者回复: 你这个理解没问题

    共 4 条评论
    4
  • asusual
    2021-08-22
    以前写测试基本都写了verify。现在看来郑大的观点非常准确~ 过度使用 verify,在写代码的时候,你会有一种成就感。但是,一旦涉及代码修改,整个人就不好了。因为实现细节被 verify 锁定死,一旦修改代码,这些 verify 就很容易造成测试无法通过。

    作者回复: 所谓经验,都是教训

    
    3
  • MHT
    2023-06-15 来自广东
    请教一下老师:假如我需要对A方法做单测,A方法调用B方法,B方法又会调用C方法,其中C的行为是不可控的,我在做mock的时候,是要mock B还是C呢?
    
    
  • 6点无痛早起学习的和...
    2023-04-28 来自北京
    Moco 主要模拟服务器,那突然想到 http 调用第三方服务器,都是在一个封装调用类里,那直接用 mock 框架,mock 这个类是不是也可以完成同样的事情
    
    
  • 江楠大盗
    2023-02-10 来自北京
    老师好,【测试应该测试的是接口行为,而不是内部实现】这句怎么理解?测试不就是测试业务的实现逻辑吗?这里怎么又说不是
    共 1 条评论
    
  • ifelse
    2022-06-08
    使用 Mock 框架,少用 verify。--记下来
    
    