pytest(3.04; python 3.4)我試圖在某些情況下禁用輸出捕獲。我試圖按照this doc page上的示例進行操作。但是,我無法將capsys指定爲funcarg。作爲後續工作,我想接受funcarg和on-funcarg參數,以便我可以使用帶有一個或多個常規參數的類方法。我怎樣才能做到這一點?在pytest中,如何暫時禁用類方法中的捕獲?
理想的情況下,此類方法將工作:
def always_print(self, message, capsys):
with capsys.disabled():
print(message)
但是,我甚至不能得到這個工作:
def always_print(capsys):
with capsys.disabled():
print('FIXME')
得到的錯誤:
...
> always_print()
E TypeError: always_print() missing 1 required positional argument: 'capsys'
編輯1: Piotr的答案解決了我的具體問題c問題。不過,我也發現,我並沒有在文檔或其他職位回升,所以在這裏分享他人的利益的兩個重要注意事項:
- 似乎capsys.disabled()只適用於stdout和不 stderr,這是我最初發送每個* nix最佳實踐的調試消息的地方。
- 如果您在調用capsys.disabled()之前將文件句柄設置爲sys.stdout 之前,那麼由於pytest所執行的魔術文件discriptor變形,這不起作用。
因此,舉例來說,你需要做這種方式(比如,如果你的kwargs可能包含一個可選的「文件」的關鍵字,如內置的打印()不:
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 funcarg添加到每個測試中,只是將它傳遞給print_always方法。我寧願不必這樣做,因爲它有很多額外的冗長。有什麼建議麼? – JJC
@JJC你好,我編輯了答案並添加了解決方案以避免冗長。 –
謝謝!使用全局模塊可能有點混亂,但它可以完成工作並避免爲我的測試功能添加大量噪音。我發現了兩個重要的警告,試圖讓這個工作成爲我之前在文檔中沒有遇到過的。我已經添加了它們。 [DziękiPiotrze! :)] – JJC