您如何使用@patch装饰器修补内置的input()函数?
例如,这是我要测试的question.py函数,其中包含对input()的调用:
def query_yes_no(question, default="yes"):
""" Adapted from http://stackoverflow.com/questions/3041986/python-command-line-yes-no-input """
valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False}
if default is None:
prompt = " [y/n] "
elif default == "yes":
prompt = " [Y/n] "
elif default == "no":
prompt = " [y/N] "
else:
raise ValueError("invalid default answer: '%s'" % default)
while True:
sys.stdout.write(question + prompt)
choice = input().lower()
if default is not None and choice == '':
return valid[default]
elif choice in valid:
return valid[choice]
else:
sys.stdout.write("Please respond with 'yes' or 'no' "
"(or 'y' or 'n').\n")
这是我的测试,它给我错误“ ImportError:没有名为’ builtins ‘的模块”:
import unittest
from unittest.mock import patch
import question
class TestQueryYesNo(unittest.TestCase):
@patch('__builtins__.input.return_value', 'y')
def test_query_y(self):
answer = question.query_yes_no("Blah?")
self.assertTrue(answer)
builtin模块在Python
3中被重命名为buildins。替换如下:
@patch('builtins.input', lambda *args: 'y')
更新
input
有一个可选参数。更新了代码以接受可选参数。
这是我在Google App Engine上的twitter讨论的后续帖子(twitter对话) 问题是Jersey和GAE不能与DataNuceleus2.0一起工作,因为GAE需要ASM4.0,而Jersey需要3.1。这里有一个详细的描述和简单的解决方案:GAE和Jersey问题描述 问候, 马里奥
问题内容: 我知道,如果go代码的结构使其可以编程为接口,那么模拟起来就很简单了。但是,我正在使用无法更改的代码库(不是我的),情况并非如此。 该代码库是高度互连的,并且仅对结构进行编程,而没有对接口进行编程,因此没有依赖项注入。 这些结构本身仅包含其他结构,因此我也无法以这种方式进行模拟。我不相信我可以对方法做任何事情,并且存在的少数几个函数不是变量,所以我不知道如何将它们换出。继承在golan
我试图使用CXF(3 . 1 . 3版)客户端调用带有补丁方法的API。 尝试按照以下线程中指定的步骤进行操作,但无法解决。只获取URLConnectionHttpConduit而不是AsyncHttpConduit http://cxf . Apache . org/docs/asynchronous-client-http-transport . html 如何在CXF中使用补丁方法 验证CX
我用的是Rails 4.2 Ruby 2.2 我生成了一个新的应用程序使用:rails的新应用程序-Skip-链轮 我所有的Gulp任务都成功运行(其中很多任务:从Gulp changed和Gulp livereload到Gulp minify css、Gulp uncss和其他)。 使用gulp rev all,我能够生成具有MD5指纹命名约定的所有资产。 它们被正确保存到rev-manifes
我正在尝试进行http补丁请求,但我总是得到404错误,所以可能是我的连接设置不正确: 我收到404错误,未找到。当使用Postman执行相同的请求时,这是有效的…谢谢你的帮助。
问题内容: 我正在尝试创建一个补丁程序来修补当前的Java应用程序,以便用户仅需要下载diff而不是整个应用程序。我不认为我需要像二进制diff一样低,因为大多数jar文件都很小,因此替换整个jar文件就没什么大不了的了(最多5MB)。 是否有标准工具来确定哪些文件已更改并为其生成补丁?我见过xdelta和vpatch之类的工具,但我认为它们可以在二进制级别工作。 我基本上想弄清楚- 需要添加,替