メソッド内の関数をモックアップしてから、setUpClass()
メソッド内の関数を復元しようとしていtearDownClass()
ます。
class MyClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.save_func = module.func
module.func = lambda: True
@classmethod
def tearDownClass(cls):
module.func = cls.save_func
tearDownClass()
メソッドの後、へのmodule.func()
呼び出しが実際の関数を呼び出すことを期待していました。しかし、そうではありません。
関数を印刷してデバッグを行いました。tearDownClass()
メソッドから以下の出力を得ました。
cls.save_func: <unbound method MyClass.save_func>
module.func: <unbound method MyClass.save_func>
私はさまざまなことを試していましたが、メソッドをクラスメソッドからセットアップメソッドに変更しました:
def setUp(cls):
cls.save_func = module.func
module.func = lambda: True
def tearDown(cls):
module.func = cls.save_func
驚いたことに、すべてが機能しているようです。module.func
復元され、印刷すると関数アドレスが表示されます。
module.func <function func at 0x89f9a74>
動作を説明していただけますか?