我知道,默认情况下,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)
有时通过有时不通过。如何使我的函数的执行顺序符合使用代理的全局状态定义它们的文件中的声明顺序?