Как вызвать ошибку при тестировании функции в Python - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь провести очень простой тест, в котором моя функция принимает один параметр - путь к базе данных, пытается подключиться к базе данных с помощью pyodbc.connect (путь к базе данных), и, если путь неверен, выдает ошибку,Тем не менее, поскольку мой тест структурирован в настоящее время, я не могу выполнить тест (повысить ошибку) при прохождении тестируемой функции по неверному пути.

Я пытался пройти тест, используя макеты ибез насмешек.Я полагаю, что правильным способом было бы использовать макеты, однако я также не мог заставить это работать (см. Код ниже).Я нашел вопросы, которые были похожи на мою проблему, но я не мог использовать предложения в этих вопросах, чтобы заставить мой тест работать.

Проверяемая функция

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) и тест должен пройти.Это не происходит, поскольку тест структурирован.

...