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