如何使用随机值验证单元测试

前端之家收集整理的这篇文章主要介绍了如何使用随机值验证单元测试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用随机值验证单元测试?
我需要保证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(),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相关文章