python - 使用生成器模拟输入

标签 python mocking yield

下面的代码不模拟输入,有没有办法用生成器来做到这一点?

    inputlist = [5,1,2,3,4,5,6]

    def mock_input(dummy_prompt=">>> "):
        global inputlist
        for u in inputlist:
                yield str(u)

    __builtins__.input = mock_input

    l=[]
    x= input()
    for u in range(int(x)):
        l.append(int(input()))

    if l==inputlist[1:]:
        print("bravo")

错误是 x 是生成器而不是字符串。

我是否必须使用全局变量创建自己的生成器,或者我错过了语法中的某些内容。

最佳答案

好的,谢谢,我错过了生成器实例化的时刻。

def gg(l):
    for u in l:
            yield str(u)


def mockinput(thelist):
    bob = gg(thelist)
    __builtins__.input = lambda prompt="toto":  str(next(bob))


inputlist = [6,1,2,3,4,5,6]
mockinput(inputlist)

l=[]
for u in range(int(input())):
    l.append(int(input()))
    print(l)

if l==inputlist[1:]:
    print("bravo")

所以我需要分两步进行,因为我不需要任何全局变量

关于python - 使用生成器模拟输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595414/

相关文章:

c# - 我如何模拟私有(private)领域?

c# - 在 asp.net MVC 中开始模拟的好的模拟框架是什么? (新手,可能不是铁杆 mock 者)

oop - 更重要的是代码的可测试性还是遵守 OOP 原则?

python-3.x - 使用 next(gen) 和 gen.send(None) 启动 Python 3 生成器有区别吗?

Python:循环中的产量与打印

django - 在继续完成与请求相关的任务之前,如何让 django 给出 HTTP 响应?

python - 为什么 Python 为短于文件系统限制的文件名给出 "OSError: [Errno 36] File name too long"?

python - Pandas - 当字符串匹配时选择两个值之间的所有行

python - 在 Mac 上将 Django 安装到 Python 3.3

python - 检查列表中的哪些数字可以被某些数字整除?