1

我想在不同的ExUnit测试文件中使用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

[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 相同)

我可以在另一个测试文件中使用模拟来实现相同的功能吗?

4

1 回答 1

2

meck当前编译并加载您所期望的代码。由于只有一个当前版本的代码可以加载到 Beam 中,因此您应该执行所有测试,这些测试按顺序竞争相同的模拟函数。

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

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

ExUnit 支持以下选项:

  • :max_cases- 并行运行的最大案例数;默认为:erlang.system_info(:schedulers_online)
于 2015-10-22T12:02:16.010 回答