我有以下函数get\u postgres\u connection。我正在尝试运行unittest,test\u get\u postgres\u connection\u未成功命中异常。
def get_postgres_connection():
try:
conn = psycopg2.connect(dbname = POSTGRES_DATABASE,
user = POSTGRES_USER,
password = POSGRES_PASSWORD,
host = POSTGRES_HOST,
port = POSTGRES_PORT)
conn.autocommit = True
return conn
except Exception as err:
logging.error('Unable to connect to postgres db: %s', err)
def test_get_postgres_connection_unsuccess(monkeypatch):
""" tests an exception is hit if the connection to postgres is unsuccesful"""
# setup
class mock_conn:
def __init__(self, dbname, user, password, host, port):
raise ConnectionError('This fake connection did not work')
autocommit = False
monkeypatch.setattr(psycopg2, 'connect', mock_conn)
我无法在模拟函数中成功引发异常。有人知道我做错了什么吗?
编辑:稍微整理一下代码
2条答案
按热度按时间yvt65v4c1#
无需创建自己的模拟类-使用
unittest.mock.MagicMock
相反你可以使用
MagicMock
示例来模拟任何东西,包括第三方函数。如果您添加side_effect=Exception()
参数,则在调用模拟时引发异常。python甚至允许您在上下文管理器中执行此操作(
with ...
语句),以便在上下文管理器块结束后,mock函数得到“unmock”。最简单的例子:
请注意,正如编写的测试一样,现在实际上并不测试任何东西。看看你的身体
get_postgres_connection
函数,您可能需要测试它是否返回None
,以及在外部库引发异常的情况下是否将某些内容写入日志文件。gfttwv5a2#
下面是我如何使用mock修复测试函数的,如上所述