4

私は Python の mock() に問題があり、何が起こっているのかを理解するのに十分な知識がありません。

次のような抽象非同期タスククラスがあります。

class AsyncTask(object):
    @classmethod
    def enqueue(cls):
        ....
        task_ent = cls.createAsyncTask(body, delayed=will_delay)
        ....

このクラスの特定のインスタンスの createAsyncTask メソッドにパッチを適用したいと考えています。

私が書いたコードは次のようになります。

@patch.object(CustomAsyncTaskClass, "createAsyncTask")
def test_my_test(self, mock_create_task):
    ....
    mock_create_task.return_value = "12"
    fn()    # calls CustomAsyncTaskClass.enqueue(...)
    ....

エンキューで task_ent を出力すると、<MagicMock name='createAsyncTask()' id='140578431952144'>

cls.createAsyncTaskエンキューで印刷すると、<MagicMock name='createAsyncTask' id='140578609336400'>

私は何を間違っていますか?createAsyncTask が 12 を返さないのはなぜですか?

4

1 に答える 1

2

次のことを試してください。

@patch("package_name.module_name.createAsyncTask")
def test_my_test(self, mock_create_task):
    ....
    mock_create_task.return_value = "12"
    fn()    # calls CustomAsyncTaskClass.enqueue(...)
    ....

ここmodule_nameで、クラスを含むモジュールの名前ですAsyncTask

一般的に、これはガイドラインですhttps://docs.python.org/3/library/unittest.mock.html#where-to-patch

于 2015-06-23T23:19:06.820 に答える