ber*_*kes 3 ruby uuid deterministic
对于我的 ruby 测试套件,我需要可预测的 UUID。我知道 UUID 本质上是随机和非确定性的,这很好。但是在测试套件中,拥有可以通过夹具、数据助手、种子等重复使用的 UUID 会很有用。
我现在有一个简单的实现,很容易导致无效的 UUID:
def fake_uuid(character = "x")
[8, 4, 4, 4, 12].map { |length| character * length }.join("-")
end
fake_uuid('a') => "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # This is valid
fake_uuid('z') => "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz" # This is invalid, not hex.
Run Code Online (Sandbox Code Playgroud)
显然,我可以添加只允许 af,0-9 作为输入的检查。另一种方法是对预先生成的 UUID 列表进行硬编码,然后根据参数选择一个。
但我想知道,没有更好的方法吗?UUIDv5 会为此工作吗?有没有办法调用SecureRandom.uuid
让它返回相同的 UUID(对于线程或会话)?它需要额外的宝石吗?或者我的方法是最接近的方法吗?
让它由所有相同的字符组成不是必需的。
让它具有一定的可读性是一个很大的优点,但不是必需的。这样,您可以例如确保 aCompany
具有 UUIDcccccccc-cccc-cccc-cccc-cccccccccccc
及其Employee
UUID eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee
。
我知道 UUID 本质上是随机和非确定性的,这很好。
这种假设是错误的。
UUID 有 5 个版本:
因此,如果您使用版本 3 或版本 5 UUID,它们将是完全确定的。