我认为这应该有一个简单的答案,我对Python比较新,所以要温柔。
如果我有这个功能:
def random_fruit():
fruits = ['apple','banana','coconut']
return "I like " + random.choice(fruits)
我想创建一个修改水果列表的测试。但我无法弄清楚如何做到这一点。所以我想做这样的事情,这显然不起作用。
class TestFruit(unittest.TestCase):
@mock.patch('fruits')
def test_random_fruit(self, fruits_list):
fruits_list = ['kiwi']
self.assertEqual(random_fruit(), u"I like kiwi")
任何帮助将不胜感激。感谢
答案 0 :(得分:4)
测试函数的一种方法是seed
the random
module,而不是尝试修改列表,所以你得到相同的"随机"结果每次:
>>> for _ in range(5):
random.seed(0)
random_fruit()
'I like coconut'
'I like coconut'
'I like coconut'
'I like coconut'
'I like coconut'
或者,将列表作为参数(注意使用None
作为可变的默认参数 - 请参阅this question):
def random_fruit(fruits=None):
if fruits is None:
fruits = ['apple','banana','coconut']
return "I like " + random.choice(fruits)
哪个会像:
>>> random_fruit()
'I like coconut'
>>> random_fruit(['kiwi'])
'I like kiwi'
请注意,如果您立即覆盖它,则test_random_fruit
没有任何参数:
def test_random_fruit(self, fruits_list):
# ^ pass argument
fruits_list = ['kiwi']
# ^ overwrite it
...