<p>您可以在每个断言之前简单地将模拟值赋给常量:</p>
<pre><code>def test_get_constant_3(self):
mymodule.MY_CONSTANT = 3
self.assertEqual(mymodule.get_constant(), 3)
mymodule.MY_CONSTANT = 7
self.assertEqual(mymodule.get_constant(), 7)
</code></pre>
<p>另一个例子</p>
<pre><code># --- config.py ---
class AppConf:
APP_TIMEZONE = os.environ.get['APP_TIMEZONE']
# --- my_mod.py ---
from datetime import datetime
from config import AppConf
LOCAL_TZ = AppConf.APP_TIMEZONE
def to_local_tz(dt_obj, tz):
"""Return datetime obj for specific timezone"""
# some code here
return local_dt_obj
def get_local_time():
return to_local_tz(datetime.utcnow(), LOCAL_TZ).strftime('%H:%M')
# --- test_my_mod.py ---
import my_mod
class TestMyMod(unittest.TestCase):
@patch('my_mod.datetime')
def test_get_local_time(self, mock_dt):
# Mock to 15:00 UTC
mock_dt.utcnow.return_value = datetime(2017, 5, 3, 15)
# Test with TZ 'Europe/Kiev' +02:00 +03:00(DST)
my_mod.LOCAL_TZ = 'Europe/Kiev'
assert my_mod.get_local_time() == '18:00'
# Test with TZ 'America/New_York' -05:00 -04:00(DST)
my_mod.LOCAL_TZ = 'America/New_York'
assert my_mod.get_local_time() == '11:00'
</code></pre>
<p>所以根本不需要修补常数</p>