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

时间:2014-04-18 16:45:46

标签: c# unit-testing

我正在研究具有以下约束的UniqueId提供程序的简单要求:

  1. 用户名的前缀为“user”
  2. Ids由数字和小写字母
  3. 组成
  4. 在会员表中所有预先存在的ID中,ID必须是唯一的
  5. Ids长度为10个字符,不包括前缀
  6. 现在我的问题是为了在预先存在的id上测试与唯一用户名相关的第3点,我是否可以生成一组随机的Id,例如20或50,并断言它们都是唯一的?

    我只是不相信这项测试会确保唯一性算法会在1,00,000个生成的ID中生成唯一ID。

    请注意,我需要先按照TDD进行测试。

3 个答案:

答案 0 :(得分:3)

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

用于测试唯一性检查 - 已知为非唯一值的提要(可能需要模拟已知的值"已知值和#34;)并确保它正确失败。

请注意使用"随机"如果现有项目的数量与所有选项的数量相当(即不能接受#34;洗牌卡牌"),则找到唯一ID可能会变得非常慢。自动递增数字/数据库字段更容易实现/证明正确性。

答案 1 :(得分:2)

基于计算随机ID所需的时间很长,您只需验证nn接近1,000,000)它们都是唯一的。 20或50不足以确保1,000,000中的1的唯一性。

要对此进行实际测试,您可以跟踪之前对Randomizer的调用,并声明每个新ID都不会被之前的任何ID重复。

此外,您似乎也可以使用GUID

答案 2 :(得分:1)

测试[伪]随机数生成器很难。关于该主题的一些资源。

但是,为什么不直接使用系统提供的东西来找到你想去的地方?

据推测,您的数据存储在数据库中。

大多数数据库都提供了生成唯一的序列ID数字的工具。你可以使用它。

在C#或SQL(通常)中生成GUID非常独特和简单。

请注意,您的用户ID的域名为36 10 (0 - 3,656,158,440,062,975):您希望获得64位值,将其转换为long并将其模数为36 < sup> 10 来获取您的用户ID。

您还可以计算[盐渍]用户数据的加密哈希并执行相同的操作。

无论如何,您需要编码以便处理生成重复ID的情况。