2

単体テストでモックを実装しようとしましたが、呼び出されるはずなのに呼び出されません。

tests.py

from mock import patch

class MyTest(TestCase):
    def test_add(self):
        name = 'Test'

        with patch('my_module.my_file.my_function') as add_method:
            m = MyModel(name=name)
            m.save()

        add_method.assert_called_with(name=name)

models.py

from my_module.my_file import my_function

class MyModel(Model):
    name = CharField(max_length=12)

    def save(self, *args, **kwargs):
        my_function(self.name)

        super(MyModel, self).save(*args, **kwargs)

my_file.py

def my_function(name):
    # Processing...

単体テストを実行すると、モックが呼び出されていないことがわかりますが、スクリプトが正常に動作することはわかっています。何かアイデア/アドバイスはありますか?

4

1 に答える 1

1

modelsインポートされると、from my_module.my_file import my_functionまだモックされていない が実行されます。テスト ケースを実行するmy_functionと、モジュール内の名前は既に実際の関数modelsにバインドされています。パッチを適用しても効果はありません。my_files

必要なのはパッチを当てることですmodels.my_function:

with patch('models.my_function') as add_method:
    m = MyModel(name=name)
    m.save()

my_file.my_function別の方法は、modelsインポート時にパッチを適用することです。

ドキュメントにパッチを適用する場所を参照してください。

于 2013-06-04T07:10:27.743 に答える