Python mock()没有嘲笑返回值

时间:2015-06-23 23:03:12

标签: python unit-testing python-unittest python-mock magicmock

我在使用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(...)
    ....

当我在enqueue中打印出task_ent时,我得到<MagicMock name='createAsyncTask()' id='140578431952144'>

当我在队列中打印cls.createAsyncTask时,我得到<MagicMock name='createAsyncTask' id='140578609336400'>

我做错了什么?为什么不赢得createAsyncTask返回12?

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

@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