我正在尝试做一个非常简单的测试,其中我的函数接受一个参数,即数据库的路径,并尝试使用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),并且测试应该通过。由于测试是结构化的,因此不会发生这种情况。