testing - 什么是 mock,什么时候应该使用它?

标签 testing mocking glossary

我刚刚阅读了有关 mock objects 的维基百科文章, 但我仍然不完全清楚他们的目的。看起来它们是由测试框架创建的对象,当实际对象太复杂或不可预测时(你知道 100% 确定模拟对象的值是什么,因为你完全控制它们)。

但是,我的印象是所有测试都是使用已知值的对象完成的,所以我一定遗漏了一些东西。例如,在一个类(class)项目中,我们的任务是开发一个日历应用程序。我们的测试套件由我们确切知道它们是什么的事件对象组成,因此我们可以测试多个事件对象、各种子系统和用户界面之间的交互。我猜这些是模拟对象,但我不知道你为什么不这样做,因为没有已知值的对象,你就无法测试系统。

最佳答案

模拟对象不仅仅是具有已知值的对象。它是一个对象,与您不能在测试中使用的复杂对象(如数据库连接和结果集)具有相同的接口(interface),但具有您可以在测试中控制的实现。

有一些模拟框架允许您即时创建这些对象,并且实质上允许您说类似这样的话:让我成为一个对象,方法 foo 接受一个 int 并返回一个 bool。当我传递 0 时,它应该返回 true。然后您可以测试使用 foo() 的代码,以确保它做出适当的 react 。

Martin Fowler 有一篇关于模拟的很棒的文章:

关于testing - 什么是 mock,什么时候应该使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/214092/

相关文章:

c# - .NET 中的属性是什么?

c# - "literal"这个词是什么意思?

php - 如何对事件记录模式静态方法进行单元测试?

java - Mockito 匹配特定的类参数

ruby-on-rails - 使用 rspec 测试 Rails STI 子类

java - 设置用于测试的默认 Content-Type

unit-testing - 是否可以在单元测试中模拟时间?

Rmarkdown 词汇表

testing - 在 Shopware 6.3.5.2 的生产模板中运行所有测试

ruby-on-rails - 组织 Rails 功能和单元测试用例的最佳方式是什么?