我想了解使用mock.patch修補Python中常量的不同方法。 我的目標是能夠使用在我的測試類定義爲我不斷修補值的變量。如何使用模擬作爲函數參數修補Python中的常量
我發現這個問題,這也解釋瞭如何修補一個常數: How to patch a constant in python 而這個問題解釋如何使用自己版本: using self in python @patch decorator
但是從這個第二個環節,我不能得到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的值更改爲所有即將到來的測試。這就是爲什麼我想使用補丁,所以它僅限於我補丁的範圍。 –
然後在你的情況下使用'with patch():'。你還需要什麼?無法理解問題,對不起。 –
在變體#3中,無論如何您都會得到與#2相同的結果,爲什麼您需要類似#3格式的內容? –