首页 > 解决方案 > Python单元测试补丁失败

问题描述

所以我一直在关注这个 youtube 视频:

https://youtu.be/6tNS--WetLI?t=1973

当我复制视频中所做的事情时,我的测试失败了:

班级:

import requests

class JetpackRebooter:

    @staticmethod
    def reboot_jetpack(secure_token):
        response = requests.post('http://my.jetpack/restarting/reboot/', data={'gSecureToken' : secure_token})
        return response.status_code

单元测试:

from src.jetpack_rebooter import JetpackRebooter
from unittest.mock import patch

def test_reboot_jetpack():
    secure_token = 'ca26bacf85c6d69d0bdaa3ff07df3cc4118abf45'
    with patch("jetpack_rebooter.requests.post") as mocked_post:
        mocked_post.return_value.status_code = 200
        assert JetpackRebooter.reboot_jetpack(secure_token) == 200

但是,更改patch("jetpack_rebooter.requests.post")patch("requests.post")会导致测试通过。为什么是这样?

标签: pythonpython-3.xunit-testingpython-requests

解决方案


patch("jetpack_rebooter.requests.post")不起作用,因为模块的完整导入路径不是jetpack_rebooter,而是src.jetpack_rebooter

正因为如此,patch("src.jetpack_rebooter.requests.post")才会奏效。

但是,作为src.jetpack_rebooter.requests指向模块对象,和requests之间没有区别;但和之间会有区别。patch("src.jetpack_rebooter.requests.post")patch("requests.post")patch("src.jetpack_rebooter.requests")patch("requests")


推荐阅读