pytest フィクスチャを使用して呼び出しをモックしopen()
、テスト ティアダウンでリセットしようとしていますが、何らかの理由でモックがテスト関数に適用されません。
これが私が持っているもののサンプルです:
# tests.py
@pytest.fixture(scope='module')
def mock_open(request):
mock = flexmock(sys.modules['__builtin__'])
mock.should_call('open')
m = (mock.should_receive('open')
.with_args('/tmp/somefile')
.and_return(read=lambda: 'file contents'))
request.addfinalizer(lambda: m.reset())
def test_something(mock_open):
ret = function_to_test()
ret[1]() # This actually uses the original open()
そして、それが重要な場合は、次のfunction_to_test()
ようになります。
# some_module.py
def function_to_test():
def inner_func():
open('/tmp/somefile').read() # <-- I want this call mocked
# More code ...
return (True, inner_func)
これは、xUnit スタイルのsetup_module()
/teardown_module()
関数を使用した場合にも発生します。しかし、モック コードをテスト関数自体の中に入れれば (これは明らかにしたくありません)、問題なく動作します。
私は何が欠けていますか?ありがとう!