Python的Mock模拟测试介绍_第1页
Python的Mock模拟测试介绍_第2页
Python的Mock模拟测试介绍_第3页
Python的Mock模拟测试介绍_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页Python的Mock模拟测试介绍Python的Mock模拟测试介绍

发表于:2023-03-21来源:DiggerPlus:DiggerPlus点击数:标签:模拟测试

Python的Mock模拟测试介绍.如何不靠耐心测试通常,我们编写的软件会直接与那些我们称之为“肮脏的”服务交互。通俗地说,服务对我们的应用来说是至关重要的,它们之间的交互是我们设计好的,但这会带来我们不希望的副作用——就是那些在我们自己测试的时候不希

pythonmock

如何不靠耐心(测试)

通常,我们编写的软件会直接与那些我们称之为"肮脏的'服务交互。通俗地说,服务对我们的应用来说是至关重要的,它们之间的交互是我们设计好的,但这会带来我们不希望的副作用就是那些在我们自己测试的时候不希望的功能。

比如,可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能',但是我们不希望每次运行测试集的时候都发布到Facebook上。

Python的unittest库中有一个子包叫unittest.mock或者你把它声明成一个依赖,简化为mock这个模块提供了非常强大并且有用的方法,通过它们可以模拟或者屏敝掉这些不受我们希望的方面。

注意:mock是最近收录在Python3.3标准库中的;之前发布的版本必须通过PyPI(下载)Mock库。

恐惧系统调用

再举一个例子,考虑系统调用,我们将在余下的文章中讨论它们。不难发现,这些都可以考虑使用模拟:无论你是想写一个脚本弹出一个CD驱动,或者是一个(web)服务用来删除/tmp目录下的缓存文件,或者是一个socket服务来绑定一个TCP端口,这些调用都是在你(单元测试)的时候是不被希望的方面。

作为一个(开发)人员,你更关心你的库是不是成功的调用了系统函数来弹出CD,而不是体验每次测试的时候CD托盘都打开。

作为一个开发人员,你更关心你的库是不是成功调用了系统函数来弹出CD(带着正确的参数等)。而不是体验每次测试的时候CD托盘都打开(或者更糟,很多次,当一个单元测试运行的时候,很多测试点都涉及到了弹出代码)。

同样地,保持你的单元测试效率和(性能)意味着要还要保留一些(自动化)测试之外的"缓慢代码',比如文件系统和网络的访问。

对于我们的第一个例子,我们要重构一个从原始到使用mock的一个标准Python(测试(用例))。我们将会证明如何用mock写一个(测试(用例))使我们的测试更智能、更快,并且能暴露更多关于我们的软件工作的问题。

一个简单的删除功能

有时,我们需要从文件系统中删除文件,因此,我们可以写这样的一个函数在Python中,这个函数将使它更容易成为我们的脚本去完成这件事情。

123456#!/usr/bin/envpython#-*-coding:utf-8-*-importosdefrm(filename):os.remove(filename)很明显,在这个时间点上,我们的rm方法不提供比基本os.remove方法更多的功能,但我们的代码将会有所改进,允许我们在这里添加更多的功能。

让我们写一个传统的测试用例,即,不用模拟测试:

12345678910111213141516#!/usr/bin/envpython#-*-coding:utf-8-*-frommymoduleimportrmimportos.pathimporttempfileimportunittestclassRmTestCase(unittest.TestCase):tmpfilepath=os.path.join(tempfile.gettempdir(),tmp-testfile)defsetUp(self):withopen(self.tmpfilepath,wb)asf:f.write(Deleteme!)deftest_rm(self):#removethefilerm(self.tmpfilepath)#testthatitwasactuallyr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论