什么是嘲弄?

梦想与她 提交于 2020-02-27 20:13:51

什么是嘲弄? 。


#1楼

Mock是一种方法/对象,以受控方式模拟真实方法/对象的行为。 模拟对象用于单元测试。

通常,测试中的方法会调用其中的其他外部服务或方法。 这些被称为依赖项。 一旦被模拟,依赖关系就像我们定义它们一样。

由于依赖项由模拟控制,我们可以轻松地测试我们编码的方法的行为。 这是单元测试。

模拟对象的目的是什么?

模拟vs存根

单元测试与功能测试


#2楼

SO上有很多答案,网上有关于嘲笑的好帖子。 你可能想要开始寻找的一个地方是Martin Fowler Mocks Are Not Stubs的帖子,他讨论了许多嘲笑的想法。

在一个段落中 - Mocking是一种特殊技术,允许测试代码单元而不依赖于依赖性。 通常,模拟与其他方法的不同之处在于,用于替换代码依赖关系的模拟对象将允许设置期望 - 模拟对象将知道代码如何调用它以及如何响应。


你的原始问题提到了TypeMock,所以我在下面给出了答案:

TypeMock是商业模拟框架的名称。

它提供了免费模拟框架(如RhinoMocks和Moq)的所有功能,以及一些更强大的选项。

你是否需要TypeMock是值得商榷的 - 你可以用免费的模拟库做大多数你想要的模拟,而且很多人认为TypeMock提供的功能通常会让你远离完美的封装设计。

正如另一个答案所说'TypeMocking'实际上并不是一个定义的概念,但可以理解为TypeMock提供的模拟类型,使用CLR分析器在运行时拦截.Net调用,提供更大的假对象能力(不是要求)例如需要接口或虚拟方法)。


#3楼

我认为使用TypeMock隔离器模拟框架将是TypeMocking。

它是一种工具,可以生成用于单元测试的模拟,而无需在编写IoC代码时编写代码。


#4楼

模拟类型的目的是切断依赖关系,以便将测试与特定单元隔离。 存根是简单的代理,而模拟是可以验证使用的代理。 模拟框架是一种可以帮助您生成存根和模拟的工具。

编辑 :由于原来的措辞提到“类型嘲笑”我得到的印象,这与TypeMock有关。 根据我的经验,一般术语只是“嘲弄”。 请随意忽略以下有关TypeMock的信息。

TypeMock Isolator与大多数其他模拟框架的不同之处在于它可以动态修改IL。 这允许它模拟大多数其他框架无法模拟的类型和实例。 要使用其他框架模拟这些类型/实例,您必须提供自己的抽象并模拟这些。

TypeMock以干净的运行时环境为代价提供了极大的灵活性。 作为TypeMock实现其结果的方式的副作用,使用TypeMock时有时会得到非常奇怪的结果。


#5楼

序言:如果你在字典中查找名词模拟 ,你会发现这个单词的一个定义是作为模仿的东西


模拟主要用于单元测试。 被测对象可能依赖于其他(复杂)对象。 要隔离要通过模拟真实对象行为的模拟替换其他对象的对象的行为。 如果将真实对象合并到单元测试中是不切实际的,这将非常有用。

简而言之,模拟是创建模拟真实对象行为的对象。


有时您可能想要区分嘲弄而不是剔除 。 关于这个主题可能存在一些分歧,但我对存根的定义是一个“最小”的模拟对象。 存根实现了足够的行为以允许被测对象执行测试。

模拟就像一个存根,但测试也将验证被测对象是否按预期调用模拟。 部分测试是验证模拟是否正确使用。

举个例子:您可以通过实现用于存储记录的简单内存结构来存根数据库。 然后,测试对象可以读取和写入数据库存根的记录,以允许它执行测试。 这可以测试与数据库无关的对象的某些行为,并且仅包括数据库存根以使测试运行。

如果您想要验证测试对象是否将某些特定数据写入数据库,则必须模拟数据库。 然后,您的测试将包含有关写入数据库mock的内容的断言。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!