pythonで
open(file_path, 'r')
みたいなのをモック化するとき、テストスクリプトに
if __name__ == '__main__':
unittest.main()
って書いて直接実行するときは
__builtins__.open = MagicMock()
みたいにしていた。
でもコマンドラインから
$ python -m unittest2 -v test_module
みたいに実行すると
AttributeError: 'dict' object has no attribute 'open'
っておこられる。
このとき
__builtins__['open']
のようにすれば参照できるので、テストコード内で
def get_builtins_open(self):
if __name__ == '__main__':
return __builtins__.open
else:
return __builtins__['open']
def set_builtins_open(self, input):
if __name__ == '__main__':
__builtins__.open = input
else:
__builtins__['open'] = input
こんなメソッドを作った。。。