python-3.x - 模拟通过构造函数创建的实例对象
问题描述
我有这个片段:
#jira_api.py
from jira import JIRA
class JiraApi:
def __init__(self):
username = os.environ.get("JIRA_USERNAME")
api_token = os.environ.get("JIRA_TOKEN")
options = {'server': 'https://mycompany.atlassian.net'}
try:
self.jira = JIRA(options=options, basic_auth=(username, api_token))
except jira.exceptions.JIRAError:
print("[ERROR] Unable to connect to JIRA with provided credentials.")
sys.exit(1)
def search(self, query):
return self.jira.search_issues(query)
有没有办法可以修补这个构造函数,以便self.jira
我自己的模拟对象的值?我想更换
self.jira = JIRA(options=options, basic_auth=(username, api_token))
如果可能的话,使用我自己的对象,以便构造函数实际上不会尝试连接到 API。我已经尝试了一些方法,特别是修补JIRA
以返回我自己的模拟对象......但没有运气。
示例尝试:
@pytest.fixture
def patched_jira_api(mocker):
def _patched_jira_api(jira_issues):
mocked_jira_client = mocker.MagicMock()
mocked_jira_client.search_issues = mocker.MagicMock(return_value=jira_issues)
return mocker.patch('jira_api.JIRA', return_value=mocked_jira_client)
return _patched_jira_api
def test_jira_basics(patched_jira_api, mock_jira_issue):
mock_issues = [
mock_jira_issue(priority="P0"),
mock_jira_issue(priority="P1")
]
patched_jira_client(mock_issues)
jira_api = JiraApi()
assert jira_api.search(query='TEST') == mock_issues
我的目标是模拟self.jira.search_issues
内置函数以返回我的mock_issues
列表,但我的构造函数仍在尝试连接到真正的 JIRA 服务器。:(
任何帮助将不胜感激,谢谢。
更新:我尝试将模块名称更新为jira.py
tojira_api.py
以避免任何命名空间问题。但是,现在我在尝试修补时失败了:
def _importer(target):
components = target.split('.')
import_path = components.pop(0)
> thing = __import__(import_path)
E ModuleNotFoundError: No module named 'jira_api'
解决方案
推荐阅读
- php - 如何更改 WooCommerce 我的帐户页面标题?
- r - 计算多个组中的共享和唯一标记
- linux - 计算Linux打开文件限制?
- javascript - 有人能解释一下这个简单函数中字母“m”到底代表什么吗?
- influxdb - InfluxDB 查询带有特定附加标签的标签值
- javascript - 如何检测文本输入上的退格键更改?
- c# - 如何将大对象发布到 Web api
- node.js - 我如何告诉 Babel CLI 忽略任何带有“__”的路径?
- c# - 我可以将训练有素的模型保存在 Accord.NET 中吗
- python - 在列而不是 DataFrame 的行中表达时间序列数据