如何在不同的ExUnit测试文件中使用meck

时间:2015-10-22 11:30:20

标签: erlang elixir meck

我想在不同的meck测试文件中使用ExUnit

例如,

[x_test.exs]

def setup do
  :meck.new(Hoge, [:passthrough])
 on_exit(fn -> :meck.unload end)
 :ok
end

def teardown do
  :meck.unload
end

test "foo" do
  :meck.expect(Hoge, :foo, fn -> 1 end)
  assert Hoge.foo == 1
end

[y_test.exs]

def setup do
  :meck.new(Hoge, [:passthrough])
 on_exit(fn -> :meck.unload end)
 :ok
end

def teardown do
  :meck.unload
end

test "foo" do
  :meck.expect(Hoge, :foo, fn -> 2 end)
  assert Hoge.foo == 2
end

有时,x_test.exs会失败,但有时候,x_test.exs会成功... (y_test.exs相同)

我可以在另一个测试文件中使用mock到同一个函数吗?

1 个答案:

答案 0 :(得分:2)

meck目前正在编译并加载您使用期望指定的代码。由于只有一个当前版本的代码可以加载到梁内,因此您应该执行所有依次为同一个模拟函数竞争的测试。

由于ExUnit文档声明测试用例是并行执行的,因此您可能必须合并所有应在单个测试用例中串行执行的测试(即单个测试模块)。

或者,您可以将可以并行执行的测试用例数设置为1.但是它可能会减慢您的测试运行速度

  

ExUnit支持以下选项:

     
      
  • :max_cases - 并行运行的最大案例数;默认为:erlang.system_info(:schedulers_online)
  •