我想捕捉和它做到這一點的函數分析輸出sys.stdout的(錯了,在):如何嘲笑爲subprocess.call
subprocess.call(參數,標準輸入= sys.stdin,標準輸出= sys.stdout的,標準錯誤= sys.stderr)
當我下運行py.test沒有任何嘲笑這個代碼,我得到錯誤:ValueError: redirected Stdin is pseudofile, has no fileno()
當我與模擬補丁sys.stdin(及其他)我得到的同樣的錯誤。
當我與mock.mock_open()
修補sys.stdin我得到錯誤:AttributeError: Mock object has no attribute 'write'
當我與mock.mock_open()('name', 'r')
修補sys.stdin我得到初始誤差:ValueError: redirected Stdin is pseudofile, has no fileno()
任何方式來傳遞某種模擬對象爲標準輸入/輸出的子進程?
我想是這樣的:
mocked = (put something here)
subprocess_call('ls', stdin=mocked, stdout=mocked, stderr=mocked)
當在py.test運行哪些應該工作。
謝謝。
你爲什麼不嘲笑'subprocess.call'?你不測試'subprocess'是否工作,只有* *使用*'subprocess'的代碼有效。 –
有人可能會爭辯說,測試外部命令是否正常工作不是你的工作;你想模擬'subprocess_call'本身。 – chepner
這個測試是集成測試的一部分,我只模擬stdout/err來檢查命令結果(因爲否則它們會直接進入用戶終端)。我需要實際的外部程序輸出(來自'args'),看看我的程序和外部程序都做了他們應該做的事情。 –