如何将模拟对象传递给pytest固定装置

时间:2018-08-17 10:34:04

标签: python-3.x mocking pytest fixtures

对不起,标题,我一定要更新...我所拥有的是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不存在...我该如何解决?

1 个答案:

答案 0 :(得分:1)

您可以定义一个夹具来依赖另一个夹具,然后在测试中将它们都设为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")