ため、私はこれを行う機能のための出力をキャプチャして分析する:(ERR、中)subprocess.call
subprocess.call(引数、STDIN = sys.stdinを、STDOUT =モックと私はsys.stdinを(および他の人にパッチを適用するとValueError: redirected Stdin is pseudofile, has no fileno()
)私が手:sys.stdoutの、私はpy.testの下で任意のモックせずにこのコードを実行すると標準エラー出力= sys.stderrを持ち)
私はエラーを取得します同じエラー。
私は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()
はとモックオブジェクトのいくつかの種類を渡すためにどのような方法ですサブプロセスのstdin/out?
mocked = (put something here)
subprocess_call('ls', stdin=mocked, stdout=mocked, stderr=mocked)
py.testの下で実行したときに動作するはずです:
は、私はこのような何かをしたいです。
ありがとうございました。
:私はのFDを作成して、私のテストの
subprocess.call
ここでは簡略化されたバージョンからの標準出力をキャプチャするために、これらを使用する
os.pipe
コールを使用することを決めましたか?サブプロセスが動作するかどうかはテストされません。*サブプロセスを使用するコードが機能する場合のみです。 –外部コマンドが正しく動作することをテストするのはあなたの仕事ではないと主張する人もいます。 'subprocess_call'自体をモックする必要があります。 – chepner
このテストは統合テストの一環であり、stdout/errだけを嘲笑してコマンド結果をチェックします(そうしないと、ユーザー端末に直接行くためです)。私のプログラムと外部プログラムの両方が自分たちがやるべきことをするのを見るためには、実際の外部プログラム出力(argsから)が必要です。 –