Python 3.x python3类使用unittest生成相同的随机值

Python 3.x python3类使用unittest生成相同的随机值,python-3.x,random,python-unittest,Python 3.x,Random,Python Unittest,这是exercism.io中的一个练习,我需要在初始化类时生成一个随机名称。其中一个单元测试用例失败,因为该类的两个实例中的随机字符串相同。如果我在unittest之外运行代码,它似乎工作正常。变量是否指向unittest中的同一地址空间 import string import random import unittest class Robot(object): def __init__(self): self.name = None self.r

这是exercism.io中的一个练习,我需要在初始化类时生成一个随机名称。其中一个单元测试用例失败,因为该类的两个实例中的随机字符串相同。如果我在unittest之外运行代码,它似乎工作正常。变量是否指向unittest中的同一地址空间

import string
import random
import unittest


class Robot(object):
    def __init__(self):
        self.name = None
        self.reset()
        print('Name at Init', self.name)

    def reset(self):
        for _ in range(5):
            new = random.choice(string.ascii_uppercase) + random.choice(string.ascii_uppercase) + str(random.randint(100, 999))

        self.name = new


class SimpleTest(unittest.TestCase):
    if not hasattr(unittest.TestCase, "assertRegex"):
        assertRegex = unittest.TestCase.assertRegexpMatches

    name_re = r'^[A-Z]{2}\d{3}$'

    def test_names(self):
        # Set a seed
        seed = "This is some seed text"

        # Initialize RNG using the seed
        random.seed(seed)

        # Call the generator
        robot = Robot()
        name = robot.name

        # Reinitialize RNG using seed
        random.seed(seed)

        # Call the generator again
        robot.reset()
        name2 = robot.name
        self.assertNotEqual(name, name2)
        self.assertRegex(name2, self.name_re)



if __name__ == '__main__':
    unittest.main()
    # print(Robot().name == Robot().name)   # Returns False



F
Name at Init WY294
======================================================================
FAIL: test_names (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/.......robot.py", line 42, in test_names
    self.assertNotEqual(name, name2)
AssertionError: 'WY294' == 'WY294'

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)

在你的测试中第二次调用seed。随机数生成器将始终为给定的种子生成相同的序列,因此,通过调用两次种子,您正在倒带序列,这就是为什么您会得到相同的值