Как исправить объект, используемый в приборе, из тестовой функции - PullRequest
0 голосов
/ 04 февраля 2019

Я пишу набор тестов для моего API, и возвращаемый результат некоторых конечных точек зависит от внутреннего состояния приложения.Моя цель состоит в том, чтобы макетировать эти конкретные «функции проверки» для проверки всех случаев.

# conftest.py

@pytest.fixture(scope='module')
def flask_app():
    app = Flask(__name__)
    app.config.from_pyfile('flaskconfig.py')
    api = ApiUnderTest()
    bp = api.get_blueprint()
    app.register_blueprint(bp)
    return app


@pytest.fixture(scope='module')
def test_client(flask_app):
    client = flask_app.test_client()
    ctx = flask_app.app_context()
    ctx.push()
    yield client
    ctx.pop()
# test_case.py

@pytest.mark.parametrize('check_return', [True, False])
def test_api_call(test_client, check_return):
    # Here I want to patch the function ApiUnderTest.state.check()
    # to return the 'check_return' value. This function will be
    # evaluated when calling the endpoint

    response = test_client.get('/endpoint')

    if check_return is True:
        assert response.status_code == 200
    else:
        assert response.status_code == 409

Это некоторый упрощенный код, но я думаю, что он показывает то, чего я хочу достичь.Теперь вопрос: как это можно сделать?

Я пытался исправить определенную функцию внутри test_api_call с помощью модуля mock, но это не повлияло на экземпляр объекта, используемый в conftest.py.

Обновление:

Поскольку исправление с использованием mock должно произойти до того, как объект будет найден.Я сейчас использую это решение:

@pytest.mark.parametrize('check_return', [True, False])
def test_api_call(api_module, test_client, check_return):
    api_module.state.check = classmethod(lambda self: check_return)

    response = test_client.get('/endpoint')

    if check_return is True:
        assert response.status_code == 200
    else:
        assert response.status_code == 409
...