如何将 mock objects 传递给 pytest fixture
How can I pass mock objects to a pytest fixture
对不起这个标题,我一定要更新它...我有一个 pytest 测试函数:
def test_update_db():
mock_connection = Mock(spec=Connection)
db_updater = DbUpdater(mock_connection)
db_updater.run("some parameter")
mock_connection.gna.assert_called_with("some different parameter")
可行,但很丑:db_updater 确实应该是一个固定装置。但我必须将连接传递给它 object,所以我宁愿:
@pytest.fixture
def db_updater():
mock_connection = Mock(spec=Connection)
return DbUpdater(mock_connection)
def test_update_db(db_updater):
db_updater.run("some parameter")
mock_connection.gna.assert_called_with("some different parameter")
更好的测试功能,但有一个问题:mock_connection 不存在...我该如何解决这个问题?
您可以定义一个夹具以依赖于另一个夹具,然后将它们都作为测试中的参数。这应该有效:
import pytest
@pytest.fixture
def conn():
return Mock(spec=Connection)
@pytest.fixture
def db_updater(conn):
return DbUpdater(conn)
def test_update_db(conn, db_updater):
db_updater.run("some parameter")
conn.gna.assert_called_with("some different parameter")
对不起这个标题,我一定要更新它...我有一个 pytest 测试函数:
def test_update_db():
mock_connection = Mock(spec=Connection)
db_updater = DbUpdater(mock_connection)
db_updater.run("some parameter")
mock_connection.gna.assert_called_with("some different parameter")
可行,但很丑:db_updater 确实应该是一个固定装置。但我必须将连接传递给它 object,所以我宁愿:
@pytest.fixture
def db_updater():
mock_connection = Mock(spec=Connection)
return DbUpdater(mock_connection)
def test_update_db(db_updater):
db_updater.run("some parameter")
mock_connection.gna.assert_called_with("some different parameter")
更好的测试功能,但有一个问题:mock_connection 不存在...我该如何解决这个问题?
您可以定义一个夹具以依赖于另一个夹具,然后将它们都作为测试中的参数。这应该有效:
import pytest
@pytest.fixture
def conn():
return Mock(spec=Connection)
@pytest.fixture
def db_updater(conn):
return DbUpdater(conn)
def test_update_db(conn, db_updater):
db_updater.run("some parameter")
conn.gna.assert_called_with("some different parameter")