跳转到主要内容

Python的存根库

项目描述

https://secure.travis-ci.org/alex/pretend.png

Pretend是一个用于简化Python存根的库。

什么是存根?

存根是编写测试的一种技术。您可能会听到它与模拟、伪造或替身等术语混在一起。基本上,存根是一个返回预定义响应的对象,而不是执行任何计算。

Martin Fowler在他的模拟不是存根文章中很好地解释了这些术语。

我如何安装pretend

使用pip很容易!

$ pip install pretend

我如何使用pretend

很简单,stub函数使创建存根变得容易

>>> from pretend import stub
>>> x = stub(country_code="US")
>>> some_function(x)

在这里,x将是一个具有单个属性country_code的对象,其值为"US"。与模拟不同,x不会响应任何其他属性或方法,也没有任何用于断言您访问的内容的方法。

如果您想向存根添加方法,只需提供一个函数给它

>>> from pretend import stub
>>> x = stub(country_code=lambda: "US")
>>> x.country_code()
'US'

需要注意的是,存根上的函数不携带self参数,这是因为存根应该返回预定义的值,而不是执行计算。

pretend的异常

有时您想存根的方法不返回值,而是引发异常。为了使这变得简单,pretend提供了一个辅助函数raiser,它可以像这样使用

>>> from pretend import stub, raiser
>>> x = stub(func=raiser(ValueError))
>>> x.func()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pretend.py", line 74, in inner
    raise exc
ValueError

为什么使用存根(stub)更好?

理想情况下,存根测试的是系统对特定输入的响应,而不是使用了哪个API。存根仍然需要你编写测试来检查计算结果,而不是寻找副作用。但这并不总是有效,因此有时你仍然需要模拟(例如,有时你确实想要检查副作用。)

我该如何放置我的存根?

如果你来自其他模拟库,你可能习惯于使用patch方法来放置模拟对象。pretend不包含这种功能,原因如下:a) 我们认为尽可能将存根作为参数传递而不是进行猴子补丁(monkey patch)是更好的选择;b) 我们认为当你确实需要猴子补丁时,你应该使用测试工具提供的工具。py.test包含这样的工具

如果我真的需要记录调用呢?

如果你真的真的需要,pretend包含一个call_recorder实用工具

>>> from pretend import call_recorder, call
>>> f = call_recorder(lambda a: a + 2)
>>> f(3)
5
>>> assert f.calls == [call(3)]

是谁写的这个?

pretend是由Alex Gaynor编写的,他只是厌倦了没有好的存根工具。这个名字来自Idan Gazit。

项目详情


下载文件

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

源代码分发

pretend-1.0.9.tar.gz (4.8 kB 查看哈希)

上传时间 源代码

构建分发

pretend-1.0.9-py2.py3-none-any.whl (3.8 kB 查看哈希)

上传时间 Python 2 Python 3

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面