Глобальная переменная может быть легко смоделирована после этих ответов . Отлично. Однако это не работает при попытке смоделировать переменную в скрипте, который вы вызываете с помощью subprocess.call()
в тесте с Pytest.
Вот мой упрощенный скрипт в файле с именем so_script.py
:
import argparse
INCREMENTOR = 4
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('input_nr', type=int, help='An int to increment')
args = parser.parse_args()
with open('test.txt', 'w+') as f:
f.write(str(args.input_nr + INCREMENTOR))
Теперь, скажем, я хочу смоделировать значение INCREMENTOR
в моих тестах, равное 1
. Если я сделаю это:
from subprocess import call
from unittest import mock
def test_increments_with_1():
with mock.patch('so_script.INCREMENTOR', 1):
call(['python', 'so_script.py', '3'])
with open('test.txt', 'r+') as f:
assert f.read() == '4'
Тест не пройден, поскольку значение INCREMENTOR
остается равным 4, хотя я попытался исправить его до 1. Итак, в файл записывается 7 вместо 4.
Итак, мой вопрос: как мне смоделировать глобальную переменную INCREMENTOR
в моем файле so_script.py
, чтобы при вызове subprocess.call()
он оставался поддельным?