Python单元测试补丁失败

时间:2019-08-04 00:34:31

标签: python python-3.x unit-testing python-requests

所以我一直在关注这个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")会使测试通过。为什么会这样?

1 个答案:

答案 0 :(得分:0)

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")之间会有区别。