跳转到主要内容

Python和Pytest的模拟库

项目描述

chainmock

Chainmock - Python和Pytest的模拟库。

pypi ci documentation license


文档


Chainmock是Python和pytest的模拟库。底层使用Python标准库模拟,提供创建模拟和断言的替代语法。Chainmock还提供了一些额外功能,使测试更快、更直接。语法与pytest fixtures配合使用特别出色。

安装

使用pip安装

pip install chainmock

功能

Chainmock支持Python标准库unittest模拟的所有功能,并添加了一些方便的额外功能。

  • 模拟:创建模拟,断言调用次数和参数或替换返回值。
  • 间谍:间谍代理调用原始函数或方法。使用间谍,您可以在不进行模拟的情况下断言调用次数和参数。
  • 存根:轻松创建存根对象,可以在测试中使用作为伪造数据或替换真实对象。
  • 异步支持:Chainmock 支持模拟和监视 异步 函数和方法。大多数情况下,它还可以自动识别何时应该使用异步模拟,因此使用起来并不比模拟同步代码更困难。
  • 完全类型注解:整个代码库都进行了完全的类型注解,因此 Chainmock 可以很好地与静态分析工具和编辑器自动完成功能配合使用。
  • 支持 Python 3.8+ 和 PyPy3
  • 支持 pytestunittestdoctest 测试运行器。

示例

Chainmock 的入口点是 mocker 函数。如下导入 mocker 函数:

from chainmock import mocker

模拟

要模拟,只需将您想要模拟的对象传递给 mocker 函数。之后,您可以根据以下方式开始模拟单个属性和方法:

# Assert that a certain method has been called exactly once
mocker(Teapot).mock("add_tea").called_once()

# Provide a return value and assert that method has been called twice
mocker(Teapot).mock("brew").return_value("mocked").called_twice()

# Assert that a method has been called with specific arguments at most twice
mocker(Teapot).mock("add_tea").all_calls_with("green").call_count_at_most(2)

监视

监视并不比模拟更复杂。您只需调用 spy 方法而不是 mock 方法。在监视一个可调用对象后,它的工作方式与监视前相同,您可以对它开始进行断言。

# Assert that a certain method has been called at least once
mocker(Teapot).spy("add_tea").called()

# Check that a method has been called at most twice and has
# at least one call with the given argument
mocker(Teapot).spy("add_tea").any_call_with("green").call_count_at_most(2)

存根

要创建存根对象,只需不带任何参数调用 mocker 函数。

# Create a stub with a method called "my_method"
stub = mocker().mock("my_method").return_value("it works!").self()
assert stub.my_method() == "it works!"

# You can give keyword arguments to the mocker function to quickly set properties
stub = mocker(my_property=10)
assert stub.my_property == 10

有关更多详细信息示例,请参阅 API 参考

类似项目

如果 chainmock 不是您需要的,还可以查看以下这些酷炫的项目

  • flexmock:Chainmock 的 API 受 flexmock 启发很大。flexmock 不使用标准库 unittest,并且具有完全自定义的模拟实现。与 flexmock 相比,如果您已经使用标准库 unittest,Chainmock 的 API 会更熟悉。此外,Chainmock 还支持异步模拟和部分参数匹配。
  • pytest-mock:与 chainmock 类似,pytest-mock 是标准库 unittest 的包装器。然而,pytest-mock 不提供任何额外的功能,因为它只是直接将 unittest 模拟暴露给用户。

贡献

您喜欢这个项目并想帮忙吗?如果您需要想法,请查看公开问题,并随时提出新的拉取请求。错误报告和功能请求也非常欢迎。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

chainmock-0.11.0.tar.gz (19.2 kB 查看散列)

上传时间

构建分发

chainmock-0.11.0-py3-none-any.whl (18.8 kB 查看散列)

上传时间 Python 3

由以下支持

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