首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用代理串行运行ExUnit.Case函数

使用代理串行运行ExUnit.Case函数
EN

Stack Overflow用户
提问于 2016-01-28 13:20:31
回答 2查看 725关注 0票数 2

我知道,默认情况下,ExUnit.Case是同步的(根据ExUnit.Case文档)。我还阅读了这个问题( https://github.com/elixir-lang/elixir/issues/3580 ),并且似乎在一个案例中的测试函数是连续运行的。

当我运行一个没有全局状态的简单测试用例时,确实是按顺序运行的。

但是当我在代理中使用全局状态时,执行的顺序取决于运气。同样的电话

代码语言:javascript
复制
mix test --trace

执行顺序发生变化。这是我的测试套件:

代码语言:javascript
复制
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的全局状态定义它们的文件中的声明顺序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-28 16:18:42

测试按顺序运行,但它们以随机顺序运行。您的测试失败了,因为它们是顺序依赖的,因为它们改变了某些全局状态。

当您运行您的套房时,您会在下面看到以下内容:

代码语言:javascript
复制
Randomized with seed 596046

您可以通过将ExUnit.configure seed: 0添加到您的test_helper.exs中来禁用它,但是我建议您的测试应该是顺序无关的。

票数 5
EN

Stack Overflow用户

发布于 2019-07-18 23:31:22

我能够使测试用例按照使用seed标志定义的顺序运行。

--seed 0 --trace

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35062690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档