python - 在 Python 中测试函数时如何引发错误
问题描述
我正在尝试做一个非常简单的测试,其中我的函数接受一个参数,一个数据库路径,尝试使用 pyodbc.connect(database path) 连接到数据库,如果路径无效会引发错误。但是,由于我的测试目前是结构化的,当我通过正在测试的函数时,我无法使测试通过(引发错误)。
我试图通过使用模拟和不使用模拟的测试。我相信正确的方法是使用模拟,但是我也无法让它工作(见下面的代码)。我发现了与我遇到的问题类似的问题,但我无法使用这些问题中的建议来让我的测试正常工作。
被测功能
import pyodbc
# When function runs by itself (no test) pyodbc.InterfaceError is raised if database path is bad!
def connect_to_database(database):
try:
conn = pyodbc.connect(database)
return conn
except pyodbc.InterfaceError as err:
raise err
测试
没有嘲笑
def test_invalid_path_to_database(self):
self.assertRaises(pyodbc.InterfaceError, connect_to_database, '')
带着嘲讽
def setUp(self):
self.mock_conn= mock.patch('my_package.my_module.pyodbc.connect').start()
self.addCleanup(mock.patch.stopall)
def test_invalid_path_to_database(self):
self.mock_conn.side_effect = pyodbc.InterfaceError
self.assertRaises(pyodbc.InterfaceError, connect_to_database, '')
我希望当传递给函数的数据库路径无效时,应该引发错误(在这种情况下为 InterfaceError)并且测试应该通过。由于测试是结构化的,因此不会发生这种情况。
解决方案
推荐阅读
- azure - Azure SignalR API 添加到组
- javascript - 在 Node 中生成以毫秒为单位的时间戳
- swift - 截取 UIScrollView 可见区域的截图
- .net - 检查 Microsoft Edge 是否已打开
- automation - 统计区分温度传感器读数和动态温度设定值 + 历史数据
- javascript - 如何向 React.useState 添加类型表示法?
- java - Eclipse - 无效的类路径容器:项目中的“TestNG”和 JUnit 失败
- python - 在 Python 中包含文件名作为 xml 到 csv 转换的一部分
- rdf - 如果实现了Giant Global Graph,如何搜索?
- javascript - 数据表 - 过滤来自 AJAX 源的数据