Pytest: протестировать метод с другой глобальной переменной - PullRequest
0 голосов
/ 11 апреля 2020

Я пишу pytest для скрипта, в котором метод использует глобальную переменную. При написании тестового метода для скрипта я хочу передать ему глобальную переменную DUMMY (т.е. 2) вместо исходного значения (например, 55). Поэтому я написал сценарий (см. Ниже), но это привело к моей ошибке.

# script1.py

VAL = 55
def add_one():
   return VAL+1

Сценарий Pytest для вышеприведенного скрипта:

# test_script1.py

import pytest
from script1 import add_one

DUMMY_VAL = 2

@pytest.mark.parametrize("VAL", DUMMY_VAL)
def test_add_one():
    expected_output = 3
    observed_output = add_one()
    assert observed_output == expected_output

Но приведенный выше тестовый скрипт Failing , поскольку вместо него VAL принимает значение 55 2. Итак, мой вопрос, есть ли способ, с помощью которого я могу передать DUMMY_VAL в метод теста, чтобы пройти мой контрольный пример. Кроме того, одно условие: я не могу sh изменить определение метода в файле script.py.

1 Ответ

1 голос
/ 11 апреля 2020

Проблема, с которой вы столкнулись, - это все признаки того, что вы не должны использовать глобалы. Тем более, что вы используете язык параметров функций (то есть s есть способ, которым я могу передать DUMMY_VAL ).

Сказав это, вы можете исправить переменную чем-то вроде - вам просто нужно выполнить импорт таким образом, чтобы вы могли получить доступ к импортированному модулю:

from unittest.mock import patch
import script1

DUMMY_VAL = 2


@patch('script1.VAL', DUMMY_VAL)
def test_add_one():
    expected_output = 3
    observed_output = script1.add_one()
    assert observed_output == expected_output
...