mock模拟方法返回时未生效

我这边在做一个代码覆盖率的测试,因为有个异常场景无法构建,所以想采用mock的方式进行模拟,但是模拟不生效:

img

img

img

img


如图所示,要覆盖被红框选中的代码

img

img

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
从您提供的代码中看不出具体的问题,不过可能是因为您没有正确配置mock对象的返回值或者没有正确地应用mock。

下面是一个可以覆盖上面代码的例子:

import unittest
from unittest import mock

class TestMyClass(unittest.TestCase):

    def test_my_method(self):
        # 创建mock对象并配置返回值
        my_class_mock = mock.Mock()
        my_class_mock.my_method.return_value = "mock response"

        # 将原有方法的调用替换为mock对象的调用
        with mock.patch('package.module.MyClass', return_value=my_class_mock):
            # 运行被测试的方法
            result = package.module.MyClass.my_method()

            # 断言mock对象的方法被调用了
            assert my_class_mock.my_method.called

            # 断言返回值为mock的返回值
            assert result == "mock response"

代码说明:

  1. 首先我们创建了一个mock对象 my_class_mock,并且配置了它的 my_method 方法的返回值为字符串 "mock response"。

  2. 通过 with mock.patch() 可以将 package.module.MyClass 中的调用替换为 my_class_mock 对象的调用,这样在测试代码运行中,通过 package.module.MyClass.my_method() 实际上是调用了 my_class_mock.my_method() 方法。

  3. 运行被测试的方法 package.module.MyClass.my_method() 后,我们可以使用 mock.mock_objects.my_method.called 断言 my_method() 方法是否被调用了,使用 assert result == "mock response" 断言该方法的返回值是否为 "mock response"。

希望这个例子对您有所帮助。
如果我的回答解决了您的问题,请采纳!