我正在尝试创建一个测试用例,以可靠地处理数据库中存在值冲突的情况。当用户在我的应用程序中执行某些操作时,随机的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还有一种更简单的方法来强制这条路径吗?由于函数是递归的,我不确定如何只在第一次调用时模拟它(如果那是我需要采取的路径。)
谢谢!
答案 0 :(得分:1)
看起来你正在进行单位测试,并且有覆盖范围。
为什么不使用get_from_database
的不同模拟进行2次单独的测试,以便您可以测试两个case
分支。