首页 / 知识
关于测试:什么是对象模拟,何时需要?
2023-04-11 19:15:00

What is Object Mocking and when do I need it?许多人在编写单元测试时都使用模拟对象。 什么是模拟对象? 为什么我需要一个? 我需要模拟对象框架吗?
对象模拟用于将依赖项排除在单元测试之外。 为此,通常需要对数据库有依赖性,但是通过对象模拟,您可以使用模拟框架模拟与数据库的交互,因此它可能会返回一个看起来像从数据库返回的数据集,然后可以进行测试您的代码,以确保它能够处理将数据集转换为人员对象的过程,而不是使用它来测试是否存在与数据库的连接。 已经有几个人回答了"什么",但是我想到了几个简单的"为什么": 性能
因为单元测试应该很快,所以测试一个组件 合作
如果您正在编写一个很好封装的 模拟对象使您可以对照正在编写的内容以及抽象细节(例如访问资源(磁盘,网络服务等))进行测试。然后,该模拟让您假装是该外部资源,类或其他内容。 您实际上并不需要模拟对象框架,只需扩展您不想在测试中担心的功能的类,并确保要测试的类可以使用模拟对象而不是真实对象(将其传递给通过构造函数或设置器之类的东西。 练习将显示模拟什么时候有用,什么时候没有帮助。 编辑:模拟资源尤为重要,因此您不必在测试过程中依赖它们的存在,并且可以模拟它们如何存在以及它们如何响应的详细信息(例如模拟FileNotFoundException或缺少的Web服务) ,或Web服务的各种可能的返回值)...都没有涉及到缓慢的访问时间(模拟将比在测试中访问此类资源要快得多)。
当然不是。有时候,手工编写模拟游戏可能会非常乏味。但是对于简单的事情,这一点也不坏。将"最后负责时刻"的原理应用于模拟框架,只有在向自己证明手写模拟比其价值更大的麻烦时,才应从手写模拟转换为框架。 如果您只是从模拟开始,那么直接跳入框架至少会使您的学习曲线翻倍(可以翻倍曲线吗?)。当您花了一些项目手工编写模拟时,模拟框架将变得更加有意义。 对象模拟是从接口,抽象类或带有虚拟方法的类中创建"虚拟"或模拟对象的方法。它允许您将其中一种包装在自己的定义中以进行测试。这对于制作要测试的特定代码块所依赖的对象很有用。 我喜欢使用的一种流行的叫做Moq,但是还有很多诸如RhinoMock之类的东西,还有许多我不知道的东西。 它使您能够测试项目的一部分如何与其余部分交互,而无需构建整个项目并可能丢失重要部分。 编辑:维基百科的一个很好的例子:它允许您事先测试代码,就像汽车设计师使用碰撞测试假人来测试事故期间汽车的行为。 另一个用途是,它将使您可以对系统中尚未构建的其他部分进行测试。例如,如果您的类依赖于其他类,而该类是其他人正在使用的功能的一部分,则您可以只要求一个几乎完整的接口,对该接口进行编程,并按自己的期望对细节进行模拟。然后,确保您对接口的假设是正确的(无论是在开发过程中,还是在功能完成后)。 模拟框架是否有用,部分取决于编写代码的语言。使用静态语言时,您需要付出更多的努力才能使编译器欺骗您的模拟对象,以代替真实对象。在动态类型的语言(如Python,Ruby或Javascript)中,通常可以将方法附加到任意对象或类上,然后将其作为参数传递-这样,框架的价值将大大减少。 用于.net单元测试的2个推荐的模拟框架是Typemock Isolator和Rhino Mock。 在以下链接中,您可以看到Typemock的解释,说明为什么需要用于单元测试的模拟框架。 |
最新内容
相关内容
python如何确定是否为可迭代对象
python如何确定是否为可迭代对象,培训,元素,索引,对象,整数,字典,函数,类型,下标,模块,迭代可以理解为,任意的集合使用for循环遍历python中,迭python怎么判断某一对象是否为字典
python怎么判断某一对象是否为字典,培训,名称,代码,情况,类型,实例,元素,字典,函数,对象,我们经常需要在Python代码中确定某个实例是什么类型python如何查看对象属性
python如何查看对象属性,培训,网络,系统,函数,对象,属性,变量,示例,实例,模块,在Python语言中,有些库在使用时,在网络上找到的文档不全,这就需要python什么是Python web框架
python什么是Python web框架,网站,培训,管理,业务,工具,名字,软件,网络,公司,框架,web框架(webframework)或者叫做web应用框架(webapplicatiopython什么是面向对象
python什么是面向对象,概念,软件,设计,培训,数据,分析,状态,系统,统一,对象,python的面向对象的思维解决问题的重点当遇到一个需求的时候不用python单元测试中的函数整理
python单元测试中的函数整理,培训,环境,测试,方法,函数,单元,条件,实例,里面,以上,python单元测试中的函数整理1、setUp准备环境。执行每个测iPhone Web应用程序,模板,框架?
iPhone Web应用程序,模板,框架?,iPhone Web应用程序,模板,框架?,应用程序,站点,用于,网页,iPhone web applications, templates, framework关于单元测试:如何使初级程序员编写
关于单元测试:如何使初级程序员编写测试?,关于单元测试:如何使初级程序员编写测试?,试了,程序员,你写,有一个,How to make junior progra关于单元测试:如何模拟Sealed类?
关于单元测试:如何模拟Sealed类?,关于单元测试:如何模拟Sealed类?,模拟,模式,密封,密封类,How do you mock a Sealed class?模拟密封课程关于单元测试:TDD和BDD之间的主要区
关于单元测试:TDD和BDD之间的主要区别是什么?,关于单元测试:TDD和BDD之间的主要区别是什么?,测试驱动开发,我在,社区,热门话题,What areJavaScript如何访问对象方法?
JavaScript如何访问对象方法?,JavaScript,如何,访问,对象,方法,对象,方法,的,, 对象方法 对象的方法定义了一个函数,并作为对象的属上下文选择器与使用DOM节点
上下文选择器与使用DOM节点,上下文,选择器,与,使用,DOM,节点,Selector,Context,, Selector Context(上下文选择器) 默认