如何模拟用于单元测试的缓冲文件句柄

2024-05-08 20:35:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想让它在没有缓冲的情况下正常工作:

$ tail -f logfile | python parser.py

以前我用过:

^{pr2}$

但现在我实现了https://stackoverflow.com/a/18235323/604515

while True:
    line = sys.stdin.readline()
    if not line: break # EOF
    parse(line)

问题:我想不出一种不使用sleep()的单元测试我的更改的方法。如何模拟缓冲文件句柄?我可以很容易地模仿stdin,但它永远不会缓冲,所以这不能证明任何东西。在

编辑:我看过StringIO,但它似乎没有普通filehandle那样的缓冲行为。在


Tags: pyhttpscomtrueparserreadlinestdinsys
1条回答
网友
1楼 · 发布于 2024-05-08 20:35:13

首先考虑通过流参数化函数。您可以使用default获取sys.stdout。你的方法变成这样:

def my_reader(feed=sys.stdin):
    while True:
        line = feed.readline()
        if not line:
            break
        parse(line)

现在您可以通过^{}框架和patch你的parse方法来模仿你的提要。不幸的是,您不能直接修补sys.stdin.readline()方法,因为它是一个只读属性。在

现在测试中的步骤是:在setUp()中创建stdin的模拟,并在测试中配置它并执行测试。举个例子。在

^{pr2}$

请注意:我修补了类,而不是按文档中的here修补所有方法。在

相关问题 更多 >

    热门问题