最简单的模拟库
项目描述
许可 & 协作
MiniMock是由Ian Bicking编写的,Mike Beachy做出了重大贡献,并由Low Kian Seong维护。它采用MIT风格的许可。
该项目有一个GitHub仓库,您可以使用以下命令克隆:git clone https://github.com/lowks/minimock.git。此外,还有一个Google Group用于开发邮件列表,您可以通过minimock-dev@googlegroups.com发送邮件。
简介
minimock是一个用于使用doctest进行Mock对象操作的简单库。当使用doctest时,mock对象可以非常简单。
以下是一个可能要测试的示例,一个简单的邮件发送者
>>> import smtplib >>> def send_email(from_addr, to_addr, subject, body): ... conn = smtplib.SMTP('localhost') ... msg = 'To: %s\nFrom: %s\nSubject: %s\n\n%s' % ( ... to_addr, from_addr, subject, body) ... conn.sendmail(from_addr, [to_addr], msg) ... conn.quit()
现在我们想要创建一个mock的smtplib.SMTP对象。我们得将我们的mock注入到smtplib模块中
>>> from minimock import Mock >>> smtplib.SMTP = Mock('smtplib.SMTP') >>> smtplib.SMTP.mock_returns = Mock('smtp_connection')
现在我们进行测试
>>> send_email('ianb@colorstudy.com', 'joe@example.com', ... 'Hi there!', 'How is it going?') Called smtplib.SMTP('localhost') Called smtp_connection.sendmail( 'ianb@colorstudy.com', ['joe@example.com'], 'To: joe@example.com\nFrom: ianb@colorstudy.com\nSubject: Hi there!\n\nHow is it going?') Called smtp_connection.quit()
哇!我们隐式地测试了对象上没有调用任何意外的方法。我们还测试了mock对象获得的参数。我们提供了假的返回调用(用于smtplib.SMTP()构造函数)。这些都是mock库的核心部分。实现简单,因为大部分工作都是由doctest完成的。
控制模拟
Mock对象有几个属性,您可以在实例化对象时设置它们。为了避免名称冲突,所有属性都以前缀mock_开始,而构造函数参数则没有。
- name:
对象名称,用于打印消息。在上述示例中是'smtplib.SMTP'。
- returns:
当此对象被调用时,将返回此值。默认为None。
- returns_iter:
或者,您也可以提供一个返回结果的迭代器,例如returns_iter=[1, 2, 3];在后续调用中,它将返回下一个值。
- returns_func:
如果给定,这将被调用以获取返回值。本质上,这个函数将是方法的真实实现。
- raises:
当此对象被调用时将引发的异常(实例或类)。
- tracker:
每次mock对象被调用或其上设置属性时(假设show_attrs为True),都会通知此对象;默认为输出到标准输出的Printer。对于非doctest测试,TraceTracker可能更有用。传递None将禁用此行为。
- show_attrs:
如果此值为true,则每次在mock对象上设置新属性时,都会通知tracker。否则属性设置是静默的,只有调用才会触发通知。
要创建一个始终引发ValueError的对象,请这样做
>>> dummy_module = Mock('mylibrary') >>> dummy_module.invalid_func.mock_raises = ValueError
创建模拟
mock对象的每个属性本身也将是另一个mock对象,除非您明确将其设置为其他内容。例如,您可以这样做
>>> from minimock import Mock >>> dummy_module = Mock('mylibrary') >>> dummy_module.CONSTANT = 1
然后,CONSTANT值将持久存在。但您也可以遍历到您想要的任何对象,您将得到另一个mock对象。
创建mock对象的另一种技术是mock(...)函数。这就像
>>> from minimock import mock >>> import os.path >>> mock('os.path.isfile', returns=True)
这查找os.path.isfile对象,并将其更改为mock对象。您提供的任何关键字参数(如本例中的returns=True)都将用于创建mock对象;您还可以提供mock_obj关键字参数来传递您已创建的mock对象。
此函数会查找调用函数以确定要替换的内容(例如,本例中的os.path.isfile)。您必须首先导入正确的模块。或者,您可以传递一个如[locals(), globals()]的字典,以便它使用查找。
要恢复使用mock()模拟的所有对象,请使用minimock.restore()(无参数;所有mock都被跟踪)。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
MiniMock-1.2.8.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5fdfdfeadf0fc781d0592a1b90d2fcc11581f682ff7cba6201cfdb15c3ea5a4c |
|
MD5 | 76593aaba949b5e010fec95283556449 |
|
BLAKE2b-256 | 43c80928c5f684d6f86fb34c12e4b6bcde2dd8b951d060f304b5e4cc4d13d106 |
MiniMock-1.2.8-py2-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | de0cb9bb71f83350acdc7228b41b23520be7466cd4fa1f467055d0f504996404 |
|
MD5 | d85904a41bfffe61d56d51b58fdfccaa |
|
BLAKE2b-256 | 20c2648140031ab22b059bcbde451cd4bb638d64b9a6fd48fe7ef4f4f82d0274 |