python - 如何在 Visual Studio Code 中为 Python 中的测试设置根目录?
问题描述
project\
src\
__init__.py
tests\
__init__.py
stubs\r_json_response_expired.json
在我的测试中,我必须加载一个 JSON 文件。这个。
@patch('requests.post')
def test_subscription_delete_only_if_invalid(self, mock_post):
with app.app_context():
expires_at = datetime.utcnow()
m = self.inject_expired_r_json()
def inject_expired_r_json(self):
with open('stubs/r_json_response_expired.json') as fb_file:
receipt_response = json.load(fb_file)
m = MagicMock()
m.json = MagicMock(name='json')
m.json.return_value = receipt_response
return m
运行测试 VS Code 时显示:
FileNotFoundError:[Errno 2] 没有这样的文件或目录:'stubs/r_json_response_expired.json'
我.env
的项目中有:
PYTHONPATH=./src
在 settings.json (VS CODE)
"terminal.integrated.env.osx": {
"PYTHONPATH": "${workspaceFolder}/src"
},
"python.envFile": "${workspaceFolder}/.env"
如果我碰巧切换了 IDE,我不喜欢更改测试中的路径以避免破坏 PyCharm。
解决方案
问题是您的测试运行时的当前目录是您的工作区根目录,project
. 可能您最好的选择是使用importlib_resources
来读取文件。如果将__init__.py
文件放在存根中,则可以将 JSON 文件读取为:
import importlib_resources
from . import stubs
data = importlib_resources.files(stubs).joinpath('r_json_response_expired.json').read_text()
如果由于某种原因您不能__init__.py
在目录中放置一个,那么您可以使用 pathlib 创建文件路径。
import pathlib
data_path = pathlib.Path(__file__).parent / "stubs" / "r_json_response_expired.json"
data = data_path.read_text(encoding="utf-8")
推荐阅读
- python - 将特定列从浮点数转换为十进制
- c - 多线程 - RunQ 随机变化
- linux - Nginx 为目录中的文件返回 404,服务器根参数是正确的
- c++ - 在堆栈方面使用 atoi 的问题,已保存编号 318 而不是 3
- java - JavaFX setPrefSize 不改变 vBox 大小
- c# - 如何让 Visual Studio IDE 消息显示?
- react-native - 反应导航重置堆栈不起作用。react-navigation v5重置堆栈不起作用
- jquery - 在提交表单之前显示确认按钮
- python - 如何添加一行来检查负数?
- android - 运行项目时出错:找不到 swiperefreshlayout.jar (androidx.swiperefreshlayout:swiperefreshlayout:1.0.0)