Python 3.x python3类使用unittest生成相同的随机值
这是exercism.io中的一个练习,我需要在初始化类时生成一个随机名称。其中一个单元测试用例失败,因为该类的两个实例中的随机字符串相同。如果我在unittest之外运行代码,它似乎工作正常。变量是否指向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
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。随机数生成器将始终为给定的种子生成相同的序列,因此,通过调用两次种子,您正在倒带序列,这就是为什么您会得到相同的值