如何对随机生成的用户ID的唯一性进行单元测试

本文关键字:唯一性 ID 单元测试 用户 随机 | 更新日期: 2023-09-27 17:58:53

我正在处理一个具有以下约束的UniqueId提供程序的简单需求:

  1. 用户名的前缀为"user"
  2. Id由数字和小写字母组成
  3. Member表中所有预先存在的Id的Id必须是唯一的
  4. ID长度为10个字符(不包括前缀)

现在我的问题是,为了在已有的Id中测试与唯一用户名相关的第三点,我可以生成一组随机的Id吗?比如说20或50,并断言它们都是唯一的吗?

我只是不相信单凭这个测试就能确保唯一性算法在100000个生成的id中生成唯一的id。

我需要注意的是,在TDD之后,我需要首先进行测试。

如何对随机生成的用户ID的唯一性进行单元测试

考虑将"唯一性"检查(即作为单独的对象)分离并单独测试-这样,您可以通过模拟"IsUnique"检查来轻松测试"随机生成的数字已经使用"。

对于测试唯一性,检查已知为非唯一值的feed(可能需要模拟什么是"已知值集"),并确保它正确失败。

请注意,如果现有物品的数量与所有选择的数量相当(即"洗牌牌"不可接受),则使用"随机"查找唯一Id可能会变得非常缓慢。自动递增数字/DB字段更容易实现/验证正确性。

根据计算随机ID所需的时间,您可以验证nn接近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的情况。