3

メソッド内の関数をモックアップしてから、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>

動作を説明していただけますか?

4

2 に答える 2

0

setUpは "static" ではないためclassmethod、クラスのインスタンスが必要です。

参考:ユニットテストの基本例

于 2013-04-17T06:47:39.667 に答える