gue*_*rda 45 testing unit-testing mocking
我最近和一位同事讨论了嘲笑问题.他说,嘲弄课程非常糟糕,不应该在少数情况下完成.
他说只有界面应该被嘲笑,否则就是架构错误.
我想知道为什么这句话(我完全信任他)是如此正确?我不知道,并且想要被说服.
我是否想念嘲笑(是的,我读过Martin Fowler的文章)
Jon*_*eet 61
模拟用于协议测试 - 它测试您将如何使用API,以及当API相应地做出反应时您将如何反应.
理想情况下(至少在许多情况下),API应该被指定为接口而不是类 - 接口定义协议,类定义至少部分实现.
实际上,模拟框架在模拟类方面往往存在局限性.
根据我的经验,模拟有点过度使用 - 通常你并不真正对确切的交互感兴趣,你真的想要一个存根 ...但是模拟框架可以用来创建存根,你陷入了创建脆弱测试的陷阱嘲笑而不是顽固.尽管如此,这是一个很难的平衡.
Pas*_*ent 24
恕我直言,你的同事意味着你应该编程到一个接口,而不是一个实现.如果你发现自己经常嘲笑课程,那么这就是你在设计架构时违背了先前原则的标志.
Ste*_*ger 15
模拟类(与模拟接口相反)是不好的,因为模拟在后台仍然有一个真正的类,它是继承的,并且有可能在测试期间执行真正的实现.
当你模拟(或存根或其他)一个接口时,不存在你实际想要模拟执行代码的风险.
模拟类也迫使你把所有可能被嘲笑的东西变成虚拟的,这是非常侵入性的,可能导致糟糕的课堂设计.
如果你想要解耦类,他们不应该彼此了解,这就是为什么模拟(或存根或其他)其中一个是有意义的.因此,无论如何都建议对接口进行实现,但其他人已经提到了这一点.
通常你会想要模拟一个接口。
虽然可以模拟常规类,但它往往会过多地影响类设计的可测试性。诸如可访问性、方法是否为虚拟等问题都将由模拟类的能力决定,而不是真正的 OO 问题。
有一个叫做 TypeMock Isolator 的伪造库可以让你绕过这些限制(吃蛋糕,吃蛋糕),但它非常昂贵。更好地设计可测试性。
我建议尽可能远离模拟框架。同时,我建议尽可能使用模拟/假对象进行测试。这里的技巧是您应该将内置的假对象与真实对象一起创建。我在一篇关于它的博客文章中更详细地解释了它:http : //www.yegor256.com/2014/09/23/built-in-fake-objects.html
| 归档时间: |
|
| 查看次数: |
24917 次 |
| 最近记录: |