加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:28:11 所属栏目:Python 来源:网络整理
导读:如何使用随机值验证单元测试? 我需要保证gen_age返回15到99之间的整数,但是这段代码不正确. import randomimport unittestdef gen_age(): # generate integer between 15 and 99 return random.randint(15,99)class AgeTest(unittest.TestCase): def setUp(
如何使用随机值验证单元测试?
我需要保证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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读