Erlang 如何在不同的ExUnit测试文件中使用meck
我想在不同的测试文件中使用 比如说, [x_test.exs]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
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”选项。但是,失败了。。