如何对随机生成的用户ID的唯一性进行单元测试
本文关键字:唯一性 ID 单元测试 用户 随机 | 更新日期: 2023-09-27 17:58:53
我正在处理一个具有以下约束的UniqueId提供程序的简单需求:
- 用户名的前缀为"user"
- Id由数字和小写字母组成
- Member表中所有预先存在的Id的Id必须是唯一的
- ID长度为10个字符(不包括前缀)
现在我的问题是,为了在已有的Id中测试与唯一用户名相关的第三点,我可以生成一组随机的Id吗?比如说20或50,并断言它们都是唯一的吗?
我只是不相信单凭这个测试就能确保唯一性算法在100000个生成的id中生成唯一的id。
我需要注意的是,在TDD之后,我需要首先进行测试。
考虑将"唯一性"检查(即作为单独的对象)分离并单独测试-这样,您可以通过模拟"IsUnique"检查来轻松测试"随机生成的数字已经使用"。
对于测试唯一性,检查已知为非唯一值的feed(可能需要模拟什么是"已知值集"),并确保它正确失败。
请注意,如果现有物品的数量与所有选择的数量相当(即"洗牌牌"不可接受),则使用"随机"查找唯一Id可能会变得非常缓慢。自动递增数字/DB字段更容易实现/验证正确性。
根据计算随机ID所需的时间,您可以验证n
(n
接近1000000)的随机ID是否都是唯一的。20或50,确保1000000分之一的唯一性是不够的。
为了实际测试这一点,您可以跟踪以前对Randomizer
的调用,并断言每个新ID都没有被以前的任何一个重复。
此外,您似乎还不如使用GUID
。
测试[pudo-]随机数生成器是…很难的。一些关于该主题的资源。
-
http://csrc.nist.gov/groups/ST/toolkit/rng/documents/nissc-paper.pdf
-
https://www.random.org/analysis/
-
http://www.drdobbs.com/testing-random-number-generators/184403185
-
http://www.johndcook.com/blog/2010/12/06/how-to-test-a-random-number-generator-2/
-
http://www.johndcook.com/Beautiful_Testing_ch10.pdf
-
http://en.wikipedia.org/wiki/Randomness_tests
但是,为什么不使用系统提供的东西让你去你想去的地方呢?
据推测,您的数据存储在数据库中。
大多数数据库都提供了生成唯一的顺序id编号的功能。你可以用它。
生成GUID在C#或SQL(通常)中都是非常独特且容易的。
请注意,用户id的域为3610(0–3656158440062975
您也可以计算[盐渍]用户数据的加密哈希,然后做同样的事情。
无论如何,您都需要进行编码,以便处理生成重复id的情况。