嘲讽打破了"测试界面,而不是实施"的咒语?

4 testing unit-testing mocking

来自维基百科(强调我的,内部参考删除):

在"单元测试的艺术"一书中,模拟被描述为一个假对象,它通过验证是否发生了与对象的交互来帮助确定测试是否失败或通过.

在我看来,模拟正在测试实现.具体来说,他们测试实现与特定对象交互的方式.

我能正确地解释这个吗?嘲笑是故意打破"测试界面,而不是实现"的咒语?或者,模拟测试是否在单元测试之外进行测试?

小智 6

正确,嘲笑不遵循"测试界面,而不是实现"的古典主义口头禅.模拟使用行为验证而不是状态验证.

来自http://martinfowler.com/articles/mocksArentStubs.html:

模拟使用行为验证.

因此,模拟测试更多地与方法的实现相关联.改变对协作者的调用性质通常会导致模拟测试中断.

这种耦合导致了一些问题.最重要的是对测试驱动开发的影响.通过mockist测试,编写测试可以让你思考行为的实现 - 事实上,模仿者测试者认为这是一个优势.然而,古典主义者认为,只考虑从外部界面发生的事情并在完成编写测试之后留下所有考虑因素都很重要.