Я пытаюсь понять различные способы исправления константы в Python с помощью mock.patch. Моя цель - использовать переменную, определенную в моем классе Test, как значение патча для моей константы.Как исправить константу в Python, используя макет как параметр функции
Я нашел этот вопрос, который объясняет, как пропатчить константу: How to patch a constant in python И этот вопрос, который объясняет, как использовать себя в патче: using self in python @patch decorator
Но из этого 2-й линии, я не могу получить testTwo способом (при условии, издеваются в качестве параметра функции) для работы
Вот мой упрощенный вариант использования:
мой module.py
MY_CONSTANT = 5
def get_constant():
return MY_CONSTANT
test_mymodule.py
import unittest
from unittest.mock import patch
import mymodule
class Test(unittest.TestCase):
#This works
@patch("mymodule.MY_CONSTANT", 3)
def test_get_constant_1(self):
self.assertEqual(mymodule.get_constant(), 3)
#This also works
def test_get_constant_2(self):
with patch("mymodule.MY_CONSTANT", 3):
self.assertEqual(mymodule.get_constant(), 3)
#But this doesn't
@patch("mymodule.MY_CONSTANT")
def test_get_constant_3(self, mock_MY_CONSTANT):
mock_MY_CONSTANT.return_value = 3
self.assertEqual(mymodule.get_constant(), 3)
#AssertionError: <MagicMock name='MY_CONSTANT' id='64980808'> != 3
Я думаю, я shoudln't использовать return_value, потому что mock_MY_CONSTANT не является функцией. Итак, какой атрибут я должен использовать для замены значения, возвращаемого при вызове константы?
Первое спасибо за ответ! Да, но в этом случае это означает, что значение mymodule.MY_CONSTANT изменяется для всех предстоящих тестов. Вот почему я хочу использовать патч вместо этого, поэтому он ограничен областью, в которой я исправляю. –
Затем используйте 'с patch():' для вашего случая. Что еще вам нужно? Не могу понять проблему, извините. –
В варианте №3 вы получаете тот же результат, что и # 2, почему вы хотите что-то вроде формата # 3? –