python-3.x - 如何将模拟对象传递给 pytest 夹具
问题描述
对不起标题,我一定要更新它......我有一个 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 应该真的是一个固定装置。但我必须将连接对象传递给它,所以我宁愿:
@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 不存在那里......我该如何解决这个问题?
解决方案
您可以定义一个夹具以依赖于另一个夹具,然后让它们在您的测试中都是 args。这应该有效:
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")
推荐阅读
- c# - C#中如何计算每单位Items的剩余数量?
- excel - 彭博报价回顾在特定时间的 Excel 中的最新出价
- python - sklearn 截断 SVD (LSA) 实施的局限性
- symfony - 从 ChoiceType 扩展的自定义类型 Enum。Symfony
- elasticsearch - 通过 logstash 配置读取和使用 elasticsearch 元数据
- python - 使用 session.add 或 session.execute 的 Flask-SQLAlchemy 事务回滚的不同行为
- .net - 在我的 .Net 应用程序中开始使用 SolrNet
- angular - 角度 5 中的 mouseup 侦听器
- styles - TYPO3:如何为自己的后端内容元素(ContentPreviewRenderer)创建 CSS 和模板文件
- python - 在 Python 中创建 Web 应用程序。有什么用?