我有一个需要使用随机整数的测试用例,所以我有:
test "test with random integer" do
IO.inspect :random.uniform(10)
assert true
end
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它总是打印4,即使我可以在控制台输出中看到不同的种子:
Randomized with seed 197796
...
Randomized with seed 124069
Run Code Online (Sandbox Code Playgroud)
我知道我应该使用:random.seed/1或:random.seed/3.我想使用与测试输出结束时打印的种子相同的种子.这样,如果我的测试失败,我可以复制它
mix test --seed 124069
Run Code Online (Sandbox Code Playgroud)
如果我使用的话,我不能这样做:random.seed(:erlang.now).
如何获取ExUnit用于在测试用例中随机化其测试用例的种子?
问题是调用时只能手动设置选项
ExUnit.configuration
Run Code Online (Sandbox Code Playgroud)
所以我在我的手动设置种子test_helpers.exs:
ExUnit.configure seed: elem(:os.timestamp, 2)
Run Code Online (Sandbox Code Playgroud)
如果我没有手动指定,ExUnit会以相同的方式设置种子:https://github.com/elixir-lang/elixir/blob/master/lib/ex_unit/lib/ex_unit/runner.ex#L54
现在在我的测试中,我可以做到:
s = ExUnit.configuration |> Keyword.get(:seed)
:random.seed(s, s, s) #random enough for me
IO.inspect :random.uniform(5)
Run Code Online (Sandbox Code Playgroud)
我每次运行测试时都会得到很好的随机值,但是如果我使用的话
mix test --seed <seed>
Run Code Online (Sandbox Code Playgroud)
我每次都会获得相同的价值.
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |