如何使用随机值验证单元测试?
我需要保证 gen_age
返回 15 到 99 之间的整数,但此代码不正确。
import random
import unittest
def gen_age():
# generate integer between 15 and 99
return random.randint(15, 99)
class AgeTest(unittest.TestCase):
def setUp(self):
self.a = gen_age()
def test_choice(self):
element = random.choice(self.a)
self.assertTrue(element in self.a)
def test_sample(self):
for element in random.sample(self.a, 98):
self.assertTrue(element in self.a)
if __name__ == '__main__':
unittest.main()
最佳答案
测试类似行为的最佳方法是为 Random 对象设置种子。
random 包提供了一个 Random 类。 Random 的实例与 random 包具有相同的方法; random(), randint(), sample(), ... 此外,Random 接受一个种子。将种子添加到 Random 使其输出确定性。例如,
from random import Random
random = Random(666)
assert random.randint(0, 1000) == 467 # will never break
因此,您想测试您的功能
from random import Random
import unittest
random = Random()
def gen_age():
# generate integer between 15 and 99
return random.randint(15, 99)
class AgeTest(unittest.TestCase):
def setUp(self):
global random
random = Random(666)
def test_gen_age(self):
self.assertEqual(gen_age(), 53)
if __name__ == '__main__':
unittest.main()
请注意,如果您的测试不在同一个文件中,您将需要使用 unittest.mock.patch
随机修补。类似的东西应该可以工作
from random import Random
from package.file import gen_age
import unittest
class AgeTest(unittest.TestCase):
def setUp(self):
self.random = Random(666)
@patch('package.file.random')
def test_gen_age(self, random):
random.randint._mock_side_effect = self.random.randint
self.assertEqual(gen_age(), 53)
关于python - 如何使用随机值验证单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26091330/