python - 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")
会导致测试通过。为什么是这样?
解决方案
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")
推荐阅读
- jsp - 如何阻止 jsp 标签显示默认的空消息?
- android - 如何在 OnPause 和 OnResume 状态下处理 ToggleButton 状态
- wpf - 在 WPF 中,如何根据数据库中配置的类型添加单选按钮、复选框、组合框?
- c# - 如何发布和发布可下载的二进制文件?
- c# - 我无法从 C# 中的列表框中获取数据绑定多个选定值
- javascript - 根据下拉选择自动填充文本框(laravel)
- javascript - React Native WebView 文件下载/上传在 Android 中不起作用
- python - 装饰器中丢失的追溯信息
- php - 将值从 HTML 传递到 PHP 文件时出错
- java - 无法将 tomcat-native 库与 Tomcat 9 链接