模拟白名单其接口

sealedmock的Python项目详细描述


Build StatusCoverage StatusCode HealthPyPI Version

密封模型

列出模拟的属性/方法,而不是让 它创建新的模拟对象。

sealedmock允许指定何时定义模拟,确保 缓存对模拟的任何意外调用。

示例:

fromunittest.mockimportMockfromsealedmockimportsealm=Mock()m.method1.return_value.attr1.method2.return_value=1seal(m)# No new attributes can be declaredm.method1().attr1.method2()# 1m.method1().attr2# Exception: AttributeError mock.method1().attr2

大新闻!这是进入Python3.7!见this PR

安装

pip install sealedmock

用法

如果您有如下文件:

importurllib2classSampleCodeClass(object):"""This is sample code"""defcalling_urlopen(self):returnurllib2.urlopen("http://chooserandom.com")defcalling_splithost(self):returnurllib2.splithost("//host:port/path")

您可以编写如下测试:

fromunittest.mockimportpatchfromsealedmockimportseal@patch("tests.sample_code.urllib2")deftest_using_decorator(mock):sample=sample_code.SampleCodeClass()mock.urlopen.return_value=2seal(mock)# No new attributes can be declared# calling urlopen succeeds as mock.urlopen has been definedsample.calling_urlopen()# This will fail as mock.splithost has not been definedsample.calling_splithost()

如果使用公共模拟,则第二部分将通过,因为它将创建 嘲笑你然后把它还给你。使用SealedMock,您可以选择何时停止 那种行为。

这是递归的,因此您可以编写:

@patch("sample_code.secret")deftest_recursive(mock):sample=sample_code.SampleCodeClass()mock.secret.call1.call2.call3.return_value=1seal(mock)# No new attributes can be declared# If secret is not used as specified above it will fail# ex: if do_stuff also calls secret.call1.call9sample.do_stuff()

如果像这样使用,它还可以防止测试中的输入错误:

@patch("sample_code.secret")deftest_recursive(mock):sample=sample_code.SampleCodeClass()sample.do_stuff()seal(mock)mock.asert_called_with(1)# Note the typo in asert (should be assert)# A sealed mock will rise, normal mock won't

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java流收集组合器   文件如何在java中逐个压缩选定的多个文件夹   从Google存储下载数据时发生java SocketTimeoutException   java在安卓应用程序客户端上从python服务器接收值,然后显示与该值对应的mysql数据   数组如何在Java中测试字符串索引是否为Null   java将一串值拆分并放入一个表中   java Spring Memcached注释不缓存   调用pom中设置的环境变量时出现java问题。xml surefire插件   java修复JFrame中重叠的鼠标侦听器   格式化java。sql。日期至yyyyMMdd   java声音剪辑。如果剪辑不正确,isActive应返回true。启动被调用   无根计算机上hadoop中的java格式化namenode   从字符串数组中删除重复项,而无需在Java中进行显式比较   java Eclipse插件安装错误   java webdriver无法在firefox中单击超链接   动画错误。朗。反思。调用目标异常   java试图调用虚拟方法“void”。小装置。编辑文本。在空对象引用上添加TextChangedListener(安卓.text.TextWatcher)”