跳转到主要内容

Python Mocking Isolation Library for Testing

项目描述

eyam是一个Python模块,它通过模拟模块中大部分内容(来自Michael Foord的Mock库)来提供对象、函数和方法的隔离。它消除了对单个模拟测试方法所依赖的所有对象的需求。执行操作后,您可以使用mock.py库提供的工具以通常的方式检查被测试代码的调用。

mock在Python 2.6版本上进行了测试。

eyam易于使用,并设计为与Michael Foord的Mock库一起使用。

您可以模拟类、实例、函数和方法。语法简单

>>> from eyam import isolate
>>> import tests.isolationfixture as mod
>>> def dump(expr):
...     print '%s == %r' % (expr, eval('mod.%s' % expr))

整个类可以被隔离

>>> with isolate(mod, 'UnmockedClass'):  #doctest:+ELLIPSIS
...     dump('MyClass')
...     dump('UnmockedClass')
MyClass == <mock.ClassMock object at 0x...>
UnmockedClass == <class 'tests.isolationfixture.UnmockedClass'>

隔离类的实例可以正常工作。模拟类的实例是Mock对象,所以它们的方法返回Mock对象

>>> with isolate(mod, 'UnmockedClass'):  #doctest:+ELLIPSIS
...     dump('MyClass().bogus()')
...     dump('UnmockedClass().instance_method()')
MyClass().bogus() == <mock.Mock object at 0x...>
UnmockedClass().instance_method() == 'return value of UnmockedClass.instance_method()'

实例也可以被隔离

>>> with isolate(mod, 'unmocked_instance'):  #doctest:+ELLIPSIS
...     dump('my_instance')
...     dump('unmocked_instance')
my_instance == <mock.Mock object at 0x...>
unmocked_instance == <tests.isolationfixture.MyClass object at 0x...>

实例的单独方法可以被隔离。该实例变成Mock对象,但原始方法被重新绑定到它

>>> with isolate(mod, 'my_instance.unmocked_method'):  #doctest:+ELLIPSIS
...     dump('my_instance')
...     dump('my_instance.unmocked_method')
...     dump('my_instance.unmocked_method()')
my_instance == <mock.Mock object at 0x...>
my_instance.unmocked_method == <bound method ?.unmocked_method of <mock.Mock object at 0x...>>
my_instance.unmocked_method() == 'return value of MyClass.unmocked_method'

实例的所有其他方法和属性都被模拟。

>>> with isolate(mod, 'my_instance.unmocked_method'):  #doctest:+ELLIPSIS
...     dump('my_instance.instance_method')
...     dump('my_instance.instance_method()')
my_instance.instance_method == <Mock name='mock.instance_method' id='...'>
my_instance.instance_method() == <mock.Mock object at 0x...>

未隔离的实例变成Mock对象,它们的返回Mock对象

>>> with isolate(mod, 'my_instance.unmocked_method'):  #doctest:+ELLIPSIS
...     dump('unmocked_instance.instance_method')
...     dump('unmocked_instance.instance_method()')
unmocked_instance.instance_method == <Mock name='mock.instance_method' id='...>
unmocked_instance.instance_method() == <mock.Mock object at 0x...>

最后,模块级别的函数也可以被隔离

>>> with isolate(mod, 'unmocked_function'):  #doctest:+ELLIPSIS
...     dump('unmocked_function')
...     dump('unmocked_function()')
unmocked_function == <function unmocked_function at 0x...>
unmocked_function() == 'return value of unmocked_function'

其他功能使用模拟对象替代

>>> with isolate(mod, 'unmocked_function'):  #doctest:+ELLIPSIS
...     dump('my_function')
...     dump('my_function()')
my_function == <mock.Mock object at 0x...>
my_function() == <mock.Mock object at 0x...>

该发行版包含测试和文档。测试需要 unittest2 运行。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

eyam-0.1.tar.gz (4.4 kB 查看哈希值)

上传时间 源代码