当前位置: 首页 > 面试题库 >

在Python 3中使用unittest.mock修补input()

钱和平
2023-03-14
问题内容

您如何使用@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之类的工具,但我认为它们可以在二进制级别工作。 我基本上想弄清楚- 需要添加,替