单元测试-Python mock()不模拟返回值



我在使用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?

尝试以下操作:

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

其中CCD_ 4是包含类别CCD_ 5的模块的名称。

一般来说,这是指导方针https://docs.python.org/3/library/unittest.mock.html#where-修补

我知道这个问题很老了,但我刚刚遇到了同样的问题,现在就解决了。

如果您修补了多个函数,那么记住顺序是非常重要的。它必须从补丁中反转。

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

相关内容

  • 没有找到相关文章

最新更新