Python和Pytest的模拟库
项目描述
Chainmock - Python和Pytest的模拟库。
Chainmock是Python和pytest的模拟库。底层使用Python标准库模拟,提供创建模拟和断言的替代语法。Chainmock还提供了一些额外功能,使测试更快、更直接。语法与pytest fixtures配合使用特别出色。
安装
使用pip安装
pip install chainmock
功能
Chainmock支持Python标准库unittest模拟的所有功能,并添加了一些方便的额外功能。
- 模拟:创建模拟,断言调用次数和参数或替换返回值。
- 间谍:间谍代理调用原始函数或方法。使用间谍,您可以在不进行模拟的情况下断言调用次数和参数。
- 存根:轻松创建存根对象,可以在测试中使用作为伪造数据或替换真实对象。
- 异步支持:Chainmock 支持模拟和监视 异步 函数和方法。大多数情况下,它还可以自动识别何时应该使用异步模拟,因此使用起来并不比模拟同步代码更困难。
- 完全类型注解:整个代码库都进行了完全的类型注解,因此 Chainmock 可以很好地与静态分析工具和编辑器自动完成功能配合使用。
- 支持 Python 3.8+ 和 PyPy3。
- 支持
pytest
、unittest
和doctest
测试运行器。
示例
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 查看散列)
关闭
chainmock-0.11.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 601be8a7f33789f67a4e3ae1795bd59cca91b6a3bd00f7472619fa05a8ac4866 |
|
MD5 | 0a6587894a1819fe1788ad1f35d92965 |
|
BLAKE2b-256 | 84118befdcbdfdc5c67247e7d50d8371cdd9ac68c005d2b1fc3ade4e465892b1 |