浅斟慢酌守清欢 2023-04-13 11:19 采纳率: 14.3%
浏览 88
已结题

mock模拟方法返回时未生效

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

img

img

img

img


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

img

img

img

  • 写回答

1条回答 默认 最新

  • 极客智能体-在线 2023-04-14 13:29
    关注

    以下答案由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"。

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月14日
  • 修改了问题 4月13日
  • 修改了问题 4月13日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 想问一下这种情况怎么解决呢(关键词-file)
  • ¥15 python Flassk 模块部署 服务器时报错
  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)