私はparser = ParserClass('/path/to/file')
のようなファイル名を与えてインスタンス化するクラスを持っています。そして、私はparser.parse()
というメソッドを呼び出してファイルを読み込みます。
今、私はユニットテストしたい悪い何かが内部で起こった場合、その:正しい例外が発生しますので、私はこのような__builtin__.open
をモックとしたいPythonで擬似ファイルオブジェクトを使って単体テストを行う方法は?
with open(filename, 'rb') as fp:
// do something
:
from mock import MagicMock, patch
from StringIO import StringIO
test_lines = StringIO("""some test lines, emulating a real file content""")
mock_open = MagicMock(return_value=test_lines)
with patch('__builtin__.open', mock_open):
self.mock.parse()
が、これは私を与えますAttributeError: StringIO instance has no attribute '__exit__'
。
StringIOはファイルオブジェクトとまったく同じように動作しますが、そうではありません。
モックオブジェクトで特定のコンテンツ(test_lines)を使ってこのメソッドをテストするにはどうすればよいですか?代わりに私は何を使うべきですか?
'TypeError:__exit __()はちょうど1つの引数(4与えられます)' – kissgyorgy
@ウォークマン:ありがとう。私は '__exit__'で受け取った例外を処理しないので、任意の数の引数を取るように更新しました。適切な実装が必要です。私はコンテキスト・マネージャーには、オープン・メソッドが、例外を処理するかどうかを知るために、あるいは単にファイルをクローズし、例外を再発生させることができるかどうかを知るために十分に精通していません。 – chepner
[ドキュメントから:](http://docs.python.org/2/reference/compound_stmts.html#with) スイートが例外のために終了し、__exit __()メソッドの戻り値がfalseの場合、例外はリレイズされます。戻り値がtrueの場合、例外は抑制され、with文の後の文で実行が継続されます。 – kissgyorgy