Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 获取种子并在ExUnit测试用例中使用随机数_Random_Elixir - Fatal编程技术网

Random 获取种子并在ExUnit测试用例中使用随机数

Random 获取种子并在ExUnit测试用例中使用随机数,random,elixir,Random,Elixir,我有一个需要使用随机整数的测试用例,所以我有: test "test with random integer" do IO.inspect :random.uniform(10) assert true end 当我运行它时,它总是打印4,即使我可以在控制台输出中看到不同的种子: Randomized with seed 197796 ... Randomized with seed 124069 我知道我应该使用:random.seed/1或:random.seed/3

我有一个需要使用随机整数的测试用例,所以我有:

test "test with random integer" do      
  IO.inspect :random.uniform(10)
  assert true
end
当我运行它时,它总是打印4,即使我可以在控制台输出中看到不同的种子:

Randomized with seed 197796
...
Randomized with seed 124069
我知道我应该使用
:random.seed/1
:random.seed/3
。我想使用与测试输出结束时打印的种子相同的种子。这样,如果我的测试失败,我可以用

mix test --seed 124069
例如,如果我使用
:random.seed(:erlang.now)
,我就不能这样做


如何获取ExUnit用于在测试用例中随机分配其测试用例的种子?

问题在于,调用时只有手动设置的选项可用

ExUnit.configuration
因此,我正在我的
测试帮助程序中手动设置种子。exs

ExUnit.configure seed: elem(:os.timestamp, 2)
如果我不手动指定,ExUnit将以相同的方式设置种子:

现在在我的测试中,我可以做到:

s = ExUnit.configuration |> Keyword.get(:seed)
:random.seed(s, s, s) #random enough for me
IO.inspect :random.uniform(5)
每次运行测试时,我都会得到很好的随机值,但是如果我使用

mix test --seed <seed>
混合测试-种子

每次我都会得到相同的值。

在回答此问题时,您可以通过调用以下命令在测试中使用随机种子:

ExUnit.configuration()[:seed]
这对于任何具有随机数的动态测试来说都是非常好的,但是需要为调试而重复,这是问题的目标。例如,如果您想要一个介于0-9之间的数字,您可以使用:

  seedable_random_number_under_10 = rem(ExUnit.configuration()[:seed], 10)

这个答案已经过时了,请参见