当前位置:  开发笔记 > 编程语言 > 正文

如何使用Mocks?

如何解决《如何使用Mocks?》经验,为你挑选了2个好方法。

当我最初被介绍给Mocks时,我觉得主要目的是模拟来自外部数据源的对象.这样我就不必维护自动化的单元测试测试数据库,我可以假装它.

但现在我开始以不同的方式思考它.我想知道Mocks是否更有效地用于将测试方法与其他任何东西完全隔离.不断浮现在脑海中的图像是您在绘画时使用的背景.你想让油漆不要遍布一切.我只测试那种方法,我只想知道它对这些伪造的外部因素有何反应?

这样做似乎令人难以置信的乏味,但我看到的优势是当测试失败时,它是因为它被拧紧而不是16层.但是现在我必须进行16次测试以获得相同的测试覆盖率,因为每个部分都将被隔离测试.此外,每个测试都变得更加复杂,并且与它正在测试的方法更加紧密相关.

对我来说感觉很对,但它似乎也很残酷,所以我想知道其他人的想法.



1> Justin Stand..:

我建议你看一下Martin Fowler的文章Mocks Are Not Stubs,以获得比Mocks更具权威性的治疗效果.

模拟的目的是单独测试代码,而不依赖于依赖项,这样您就可以在"单元"级别真正测试一段代码.正在测试的代码是真正的交易,它依赖的每一段代码(通过参数或依赖注入等)都是一个"模拟"(一个空的实现,它总是在调用其中一个方法时返回预期的值.)

Mocks一开始可能看起来很乏味,但是一旦你开始使用它们,它们会使单元测试变得更容易和更强大.大多数语言都有模拟库,这使得模拟相对微不足道.如果你使用Java,我会推荐我最喜欢的:EasyMock.

让我完成这个想法:你也需要集成测试,但是有大量的单元测试可以帮助你找出哪个组件包含一个bug,当一个bug存在时.



2> Gishu..:

不要沿着黑暗的道路走下卢克大师.:)不要嘲笑一切.你可以,但你不应该...这就是原因.

如果继续隔离测试每个方法,你有意外的惊喜,并为你工作切出当你把它们放在一起阿拉BIG BANG.我们构建对象以便他们可以一起工作来解决更大的问题.他们自己是微不足道的.您需要知道所有协作者是否按预期工作.

模拟通过引入重复使测试变得脆弱 - 是的,我知道这听起来很惊人.对于您设置的每个模拟,存在方法签名存在的n个位置.实际代码和您的模拟期望(在多个测试中).更改实际代码更容易......更新所有模拟期望是乏味的.

您的测试现在可以了解内部实施信息.所以你的测试取决于你如何选择实施解决方案......糟糕.测试应该是一个独立的规范,可以通过多种解决方案来满足.我应该可以自由地在一段代码上按删除并重新实现,不必重写测试套件.因为要求仍然保持不变.

要结束,我会说"如果它像鸭子一样嘎嘎叫,像鸭子一样走路,那么它可能就像一只鸭子" - 如果感觉不对,那可能就是这样.*使用模拟来抽象问题儿童,如IO操作,数据库,第三方组件等.像盐,其中一些是必要的..太多了:x*
这是基于状态的基于战争的基于Iteraction的测试..谷歌搜索将给你更深刻的见解.

澄清:我在这里遇到了一些阻力综合测试:)所以澄清我的立场..

模拟不会出现在"验收测试"/集成领域.你只能在单元测试世界中找到它们.这是我的重点.

验收测试是不同的,非常需要 - 不要轻视它们.但是单元测试和验收测试是不同的,应该保持不同.

组件或包中的所有协作者不需要彼此隔离.就像Overkill的微优化一样.它们的存在是为了共同解决问题.凝聚力.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有