测试Elixir中的随机值冲突

时间:2017-08-16 01:18:52

标签: elixir

我正在尝试创建一个测试用例,以可靠地处理数据库中存在值冲突的情况。当用户在我的应用程序中执行某些操作时,随机的12位数字将保存到附加到该操作的数据库中。如果数字不是全长,则数字填充为12位数。如果该数字已存在于数据库中,则程序会选择另一个随机数。

这可能听起来很愚蠢,但预期的用户群可能会少于100-1000个用户。

我的代码看起来像

def gen_random_unique() do
  unique = (:rand.uniform(1_000_000_000_000) - 1)
  |> Integer.to_string()
  |> String.pad_leading(12, ["0"])

  case get_from_database(unique) do
    nil ->
      unique
    _ ->
      gen_random_unique()
  end
end

除了测试第二个条件数百万次直到它通过之外,Elixir还有一种更简单的方法来强制这条路径吗?由于函数是递归的,我不确定如何只在第一次调用时模拟它(如果那是我需要采取的路径。)

谢谢!

1 个答案:

答案 0 :(得分:1)

看起来你正在进行单位测试,并且有覆盖范围。

为什么不使用get_from_database的不同模拟进行2次单独的测试,以便您可以测试两个case分支。