Python的mock()无法模拟返回值

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(...)
    ....

当我在enqueue中打印出task_ent时,我得到的是``。
当我在enqueue中打印出`cls.createAsyncTask`时,我得到的是``。
我做错了什么?为什么createAsyncTask不返回12?

忽略这个——我把某个东西的参数搞反了。我不知道如何删除问题,很抱歉 =( - user358829
2
最好的做法是写下答案(无论看起来多么荒谬)并接受它。 - niCk cAMel
2个回答

3
尝试以下操作:
@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的指南。


0

我知道这个问题已经很久了,但我刚遇到了同样的问题并现在解决了。

如果您打补丁修复多个函数,非常重要的是将顺序牢记在心。它必须从补丁中反向操作。

@patch("package_name.function1")
@patch("package_name.function2")
def test_method(
mocked_function2: MagicMock,
mocked_function1: MagicMock
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接