2016-09-08 13 views
0

自動テストを実行する際に、スクリプトがディスクにデータを書き込んでいないことを確認したいと思います。私は、個々の機能の単体テストではなく、スクリプト全体のテストを行っています。Python内からディスクへのすべての書き込みを防ぐ方法

このスクリプト内でPythonスクリプトが実行するすべてのDisk-IOを傍受する方法はありますか?

明らかに、私はオープン機能を模擬することができます(例えばモックパッケージhttp://www.voidspace.org.uk/python/mock/helpers.html?#mock-open)。問題はオープンがどのモジュールで発生するかを知る必要があることです。私は__main__.openと同様に__module1.openmodule2.openなどを嘲笑しなければなりません。 問題は、どのモジュールがファイルに書き込むのかわからないことです。

+0

以前のリビジョンはうまく機能していました。 –

+0

私は推測していますが、* nixマシンで実行している場合は、I/Oをリダイレクトしてディスクに書き込まないようにすることができると思います。このようにして、別の実行のためにI/Oをもう一度持つことができるようにするために、アプリケーションコードに触れる必要はありません。 – Marcs

+0

@Marcsリダイレクションは、スクリプトが標準出力に書き込んでいる(またはより一般的には、呼び出し元から継承したファイルを開く)場合にのみ機能します。呼び出し元はスクリプトが明示的に開くファイルを制御できません。 – chepner

答えて

1

openを嘲笑すれば、モックをbuiltins moduleに貼り付けることができます。

with mock.patch('builtins.open', mock_open()): 
    # ... 

はPython 2では、モジュールは__builtin__と呼ばれていました:これは、すべての組み込み関数のために相談されたモジュールです。

これは必ずしもすべての書き込みをキャッチするわけではありません。 os.open()を使用してOSファイルハンドルを直接使用するか、またはio.open()またはcodecs.open()を使用するものは、ディスクに書き込まれる可能性があります。

関連する問題