Я пытаюсь выполнить модульное тестирование одной из своих функций, чтобы убедиться, что соединение с базой данных является действительным, и, если это не так, вызвать правильное исключение. У меня возникают трудности с возможностью проверить, было ли вызвано правильное исключение, учитываячто соединение с базой данных не допустимо
Я успешно смоделировал соединение с базой данных и получил желаемый результат, когда соединение допустимо.Однако, несмотря на то, что тест был успешным, он определенно не работает, как предполагалось.Когда я проверяю соединение с базой данных с конкретной ошибкой и утверждаю, что возникла другая ошибка, тест все равно проходит, даже если это разные ошибки.См. Код для получения более подробной информации.
def get_database():
try:
conn = pyodbc.connect(
r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=M:\Path\To\Database\My_Database.accdb;'
)
return conn
# I want to assert this specific error is raised given bad connection
except pyodbc.Error as err:
raise err
@mock.patch('directory1.script1.pyodbc.connect')
def test_database_connection_error(self, mock_conn):
# If connection is valid test works as intended!
get_database()
mock_conn.assert_called_once_with((
r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=M:\Path\To\Database\My_Database.accdb;'
))
# This test still passes even though the errors are different!
mock_conn.side_effect = pyodbc.ProgrammingError
self.assertRaises(pyodbc.Error, get_database)
Я ожидаю, что если в фиктивном соединении с базой данных задан один тип ошибки, и выдается другая ошибка, тест не должен пройти.Это не тот случай.