小编hdc*_*cos的帖子

使用 Agent 串行运行 ExUnit.Case 函数

我知道,默认情况下,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)

有时通过有时不通过。如何使我的函数的执行顺序符合使用代理的全局状态定义它们的文件中的声明顺序?

unit-testing elixir

2
推荐指数
1
解决办法
828
查看次数

标签 统计

elixir ×1

unit-testing ×1