用于测试的python模拟隔离库
eyam的Python项目详细描述
eyam是一个python模块,它提供对象的隔离, 通过模拟模块中的大部分内容 模拟对象(来自michael foord的模拟库)。它消除了需要 单独模拟被测方法所依赖的所有对象 打开。执行操作后,可以检查由代码发出的调用 使用mock.py提供的工具以通常的方式进行测试 图书馆
mock在python 2.6版上进行了测试。
Eyam非常易于使用,并且设计用于 迈克尔·福德的模拟图书馆。
您可以模拟类、实例、函数和方法。语法是 简单明了:
>>> 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'>
独立类的实例正常工作。嘲弄的实例 类是模拟对象,因此它们的方法返回模拟对象:
>>> 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...>
实例的个别方法可以被隔离。实例 成为模拟对象,但原始方法被重新绑定到它:
>>> 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...>
非隔离实例成为模拟对象,它们的方法返回 模拟对象:
>>> 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运行。