07 | Mock 框架:怎么让测试变得可控?
从模式到框架
- 深入了解
- 翻译
- 解释
- 总结
Mock框架:让测试变得更可控 本文深入介绍了Mock框架的基本原理和使用方法,旨在帮助读者了解如何通过Mock框架解决测试中的不可控因素,使得测试变得更加可控和稳定。作者首先强调了良好的软件设计对测试的重要性,指出好的设计可以将实现细节从业务代码中隔离出去,提高测试的可控性。在此基础上,Mock框架的作用得以突出,它能够使用可控的组件代替不可控的组件,从而提高测试的可控性。 文章详细介绍了Mock框架的基本逻辑和使用方法,以Mockito框架为例进行讲解。重点强调了设置模拟对象和校验对象行为的重要性,包括如何创建模拟对象、设置模拟对象的行为以及校验对象行为是否符合预期。此外,还介绍了Mock框架的发展历程和在Java社区中的应用情况。 另外,文章还提到了Mock框架的延伸,即模拟服务器的应用。通过Moco框架的示例,展示了如何模拟HTTP服务器和WebSocket服务器,进一步延伸了Mock框架的应用范围。 总的来说,本文通过通俗易懂的方式,帮助读者快速了解Mock框架的核心概念和使用方法,强调了Mock框架在测试中的重要作用,以及其在解决测试不可控因素方面的价值。文章内容丰富,适合技术人员阅读,能够帮助他们更好地理解和应用Mock框架。
《程序员的测试课》,新⼈⾸单¥59
全部留言(12)
- 最新
- 精选
- sylan2151、这一讲主要是讲 Mock 的,对于自动化测试来说,这个技术确实很关键,当然,老师也在文中建议慎用,使用的前提是,我们真的明白这些技术的作用和副作用。 2、前一讲说了测试要减少耦合性,同时我们为了保证测试目的的唯一性,就引入了 Mock 技术,它一定程度上,让我们的关注点更集中; 3、和 Mock 技术类似,我们还可以了解 Stub、Dummy、Fake、Spy 等技术,同样是帮忙我们优化测试目的,简化测试实现的; 4、Mock 等模拟对象,可以让我们方便的模拟传参和不同返回值的情况,这些如果是在实际业务环境中,构造起来可能会非常麻烦; 5、非测试目的的过程中的 verify 要慎用,避免降低用例的适用性,也会增加用例的维护成本; 以上,期待后续的精彩内容。
作者回复: 多谢你的总结!
2021-08-187 - return请教一下老师, 把第三方mock掉了, 那么如何验证 我们请求第三方的参数是否正确, 我们到第三方的请求是否可以正常运行。
作者回复: 严格地说,第三方是否正常运行,这事不属于测试。如果采用测试的方式,第三方服务有一天宕机了,你的测试失败了,但你根本就没有动代码。所以,它无法起到测试应有的作用。所以,你真正需要的是一个监控程序,而不是一个测试。 当然,为了让人们注意到第三方服务的正确性,你专门做一个“测试”集合,在持续集成的服务以更长的周期运行,而不需要像普通的测试一样,每次提交都运行。
2021-08-2045 - 阿姆斯壮今天又忍不住上来分享一下。把郑大之前的课程应用到工作之后。先从「坏味道」入手,利用函数式编程消除大量重复代码。不做CVS程序员。当工作和学习充分结合起来后,发现每天的工作都充满了乐趣。总感觉工作时间好快。(一天7个小时)不需要加班。可能我们公司是一个不务正业的IT公司。接下来,就是期待郑大的测试课。把自动化测试这块也应用到工作中。
作者回复: 加油,向高水平程序员进军!
2021-08-185 - byemoto如果存在多层, 那么每层对下层依赖的对象都需要做Stub/Mock吗? 比如AggregateService依赖多个Service对象, 而各个Service对象又有自己的Repository, 那么在测试AggregateService时, 需要对各个Service对象做Mock吗?
作者回复: 按照你的逻辑,测试这个聚合服务就是要对其依赖的服务做Mock。这和单独的服务是否依赖于Repository没关系
2021-08-1824 - 下弦の月是否可以这么理解? 有个待测的组件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。
作者回复: 你这个理解没问题
2021-08-1844 - asusual以前写测试基本都写了verify。现在看来郑大的观点非常准确~ 过度使用 verify,在写代码的时候,你会有一种成就感。但是,一旦涉及代码修改,整个人就不好了。因为实现细节被 verify 锁定死,一旦修改代码,这些 verify 就很容易造成测试无法通过。
作者回复: 所谓经验,都是教训
2021-08-223 - MHT请教一下老师:假如我需要对A方法做单测,A方法调用B方法,B方法又会调用C方法,其中C的行为是不可控的,我在做mock的时候,是要mock B还是C呢?2023-06-15归属地:广东
- 6点无痛早起学习的和尚Moco 主要模拟服务器,那突然想到 http 调用第三方服务器,都是在一个封装调用类里,那直接用 mock 框架,mock 这个类是不是也可以完成同样的事情2023-04-28归属地:北京
- 一打七老师好,【测试应该测试的是接口行为,而不是内部实现】这句怎么理解?测试不就是测试业务的实现逻辑吗?这里怎么又说不是2023-02-10归属地:北京1
- ifelse使用 Mock 框架,少用 verify。--记下来2022-06-08