Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如何在不同的ExUnit测试文件中使用meck_Erlang_Elixir_Meck - Fatal编程技术网

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

Erlang 如何在不同的ExUnit测试文件中使用meck,erlang,elixir,meck,Erlang,Elixir,Meck,我想在不同的测试文件中使用 比如说, [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 def

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

比如说,

[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
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
[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 -> 1 end)
  assert Hoge.foo == 1
end
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-to-same函数吗?

meck
当前编译并加载您预期指定的代码。因为只有一个当前版本的代码可以加载到梁中,所以您应该按顺序执行所有针对同一模拟函数的测试

正如ExUnit文档所述,测试用例是并行执行的,您可能必须合并应在单个测试用例(即单个测试模块)中串行执行的所有测试

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

ExUnit支持以下选项:
  • :最大案例数
    -并行运行的最大案例数;默认值为
    :erlang.system\u info(:schedulers\u online)

非常感谢。我知道测试用例是并行执行的。所以,我尝试在每个测试用例中调用“meck.new”。(设置中不调用)在这种情况下,测试没有失败。@user4252489您在这里获得了资源(代码)上的经典竞争条件。您必须同步,否则您的测试将不可靠。在每个测试中调用
meck:new
并不是不够的,也不是完全绕过模拟。谢谢您的回复。>您可以在这里获得资源(代码)上的经典竞争条件。您必须>同步,否则您的测试将不可靠。呼叫meck:new in>>每个测试都不够哦…>或者干脆绕过mock,我想mock System.cmd。。。我尝试使用exunit的“async”选项。但是,失败了。。