【发布时间】:2019-09-10 16:33:41
【问题描述】:
我有一个名为learning 的模块使用random.uniform()。我有一个名为test_learning.py 的文件,其中包含单元测试。当我运行单元测试时,我希望learning 中的代码可以看到random.uniform() 的修补版本。我怎样才能做到这一点?这是我目前拥有的。
import random
import unittest
import unittest.mock as mock
class TestLearning(unittest.TestCase):
def test_get_random_belief_bit(self):
with mock.patch('learning.random.uniform', mock_uniform):
bit = learning.get_random_belief_bit(0.4)
self.assertEqual(bit, 0)
但测试(有时)失败,因为learning.get_random_belief_bit() 似乎使用的是真正的random.uniform()。
【问题讨论】:
-
我猜你必须在
random处修补uniform -
另外你在测试中导入
random,这会破坏模拟,为什么不from random import uniformlearning? ...这样您就不必模拟random? -
@geckos 我该怎么做才能“从随机导入制服”导入模拟版本?
-
将
import random替换为from random import uniform并模拟为with mock.patch('learning.uniform', return_value=1) as uniform_mock -
as ..部分是可选的,但如果您需要自定义更多模拟行为时很有用
标签: python unit-testing mocking python-unittest