在pytest(3.04;python3.4)中,我试图在某些情况下禁用输出捕获。我试着以this doc page为例。但是,我无法将capsys指定为funcarg。作为后续操作,我希望同时接受funcarg和on funcarg参数,这样我就可以使用一个接受一个或多个普通参数的类方法。我怎么能做到呢?在
理想情况下,这种类方法可以工作:
def always_print(self, message, capsys):
with capsys.disabled():
print(message)
但是,我甚至不能让它工作:
^{pr2}$获取错误:
...
> always_print()
E TypeError: always_print() missing 1 required positional argument: 'capsys'
编辑1: 皮奥特的回答解决了我的具体问题。然而,我也发现了两个我在文档或其他帖子中没有提到的重要注意事项,因此在这里为他人分享利益:
因此,例如,您需要这样做(例如,如果您的kwargs可能包含可选的“file”关键字,如内置print()所做的:
fhandle = kwargs.get('file', sys.stdout) #will not work!
with capsys.disabled():
fhandle = kwargs.get('file', sys.stdout) #must be in context
print(message, file=fhandle)
嗯,
capsys
是一个内置的测试夹具。你应该把它作为测试的论据,然后再通过如果您使用
pytest
命令运行它,它将工作。在编辑:
为了避免冗长,可以为所有测试准备一些全局
^{pr2}$capsys
变量(基于答案how to share a variable across modules for all tests in py.test):相关问题 更多 >
编程相关推荐