我知道,默认情况下,ExUnit.Case是同步的(根据ExUnit.Case文档)。我还阅读了这个问题( https://github.com/elixir-lang/elixir/issues/3580 ),并且似乎在一个案例中的测试函数是连续运行的。
当我运行一个没有全局状态的简单测试用例时,确实是按顺序运行的。
但是当我在代理中使用全局状态时,执行的顺序取决于运气。同样的电话
mix test --trace执行顺序发生变化。这是我的测试套件:
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有时会过去,有时不会。如何使函数的执行顺序符合使用Agent的全局状态定义它们的文件中的声明顺序?
发布于 2016-01-28 16:18:42
测试按顺序运行,但它们以随机顺序运行。您的测试失败了,因为它们是顺序依赖的,因为它们改变了某些全局状态。
当您运行您的套房时,您会在下面看到以下内容:
Randomized with seed 596046您可以通过将ExUnit.configure seed: 0添加到您的test_helper.exs中来禁用它,但是我建议您的测试应该是顺序无关的。
发布于 2019-07-18 23:31:22
我能够使测试用例按照使用seed标志定义的顺序运行。
--seed 0 --trace
https://stackoverflow.com/questions/35062690
复制相似问题