hdc*_*cos 2 unit-testing elixir
我知道,默认情况下,ExUnit.Case 是同步的(根据ExUnit.Case 文档)。我还阅读了这个问题(https://github.com/elixir-lang/elixir/issues/3580),并且案例内的测试函数似乎是串行运行的。
当我运行一个没有全局状态的简单测试用例时,确实是串行运行的。
但是,当我将全局状态与代理一起使用时,执行顺序取决于运气。对于同一个调用
mix test --trace
Run Code Online (Sandbox Code Playgroud)
执行顺序改变。这是我的测试套件:
defmodule SerialTest do
use ExUnit.Case
test "1" do
Agent.update(:card_id, fn nil -> 1 end)
assert true
end
test "2" do
res = Agent.get(:card_id, fn res -> res end)
assert res == 1
end
test "3" do
Agent.update(:card_id, fn id -> 3 end)
assert true
end
test "4" do
res = Agent.get(:card_id, fn res -> res end)
assert res == 3
end
end
Run Code Online (Sandbox Code Playgroud)
有时通过有时不通过。如何使我的函数的执行顺序符合使用代理的全局状态定义它们的文件中的声明顺序?
测试连续运行,但按随机顺序运行。您的测试失败是因为它们在更改某些全局状态时依赖于顺序。
当您运行套件时,您会在底部看到以下内容:
Randomized with seed 596046
Run Code Online (Sandbox Code Playgroud)
ExUnit.configure seed: 0您可以通过添加到您的来禁用它test_helper.exs,但我宁愿建议您的测试与顺序无关。
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |