Flo*_*ory 23 unit-testing mocking
当我最初被介绍给Mocks时,我觉得主要目的是模拟来自外部数据源的对象.这样我就不必维护自动化的单元测试测试数据库,我可以假装它.
但现在我开始以不同的方式思考它.我想知道Mocks是否更有效地用于将测试方法与其他任何东西完全隔离.不断浮现在脑海中的图像是您在绘画时使用的背景.你想让油漆不要遍布一切.我只测试那种方法,我只想知道它对这些伪造的外部因素有何反应?
这样做似乎令人难以置信的乏味,但我看到的优势是当测试失败时,它是因为它被拧紧而不是16层.但是现在我必须进行16次测试以获得相同的测试覆盖率,因为每个部分都将被隔离测试.此外,每个测试都变得更加复杂,并且与它正在测试的方法更加紧密相关.
对我来说感觉很对,但它似乎也很残酷,所以我想知道其他人的想法.
Jus*_*ard 19
我建议你看一下Martin Fowler的文章Mocks Are Not Stubs,以获得比Mocks更具权威性的治疗效果.
模拟的目的是单独测试代码,而不依赖于依赖项,这样您就可以在"单元"级别真正测试一段代码.正在测试的代码是真正的交易,它依赖的每一段代码(通过参数或依赖注入等)都是一个"模拟"(一个空的实现,它总是在调用其中一个方法时返回预期的值.)
Mocks一开始可能看起来很乏味,但是一旦你开始使用它们,它们会使单元测试变得更容易和更强大.大多数语言都有模拟库,这使得模拟相对微不足道.如果你使用Java,我会推荐我最喜欢的:EasyMock.
让我完成这个想法:你也需要集成测试,但是有大量的单元测试可以帮助你找出哪个组件包含一个bug,当一个bug存在时.
Gis*_*shu 15
不要沿着黑暗的道路走下卢克大师.:)不要嘲笑一切.你可以,但你不应该...这就是原因.
要结束,我会说"如果它像鸭子一样嘎嘎叫,像鸭子一样走路,那么它可能就像一只鸭子" - 如果感觉不对,那可能就是这样.*使用模拟来抽象问题儿童,如IO操作,数据库,第三方组件等.像盐,其中一些是必要的..太多了:x*
这是基于状态的基于战争的基于Iteraction的测试..谷歌搜索将给你更深刻的见解.
澄清:我在这里遇到了一些阻力综合测试:)所以澄清我的立场..
| 归档时间: |
|
| 查看次数: |
2128 次 |
| 最近记录: |