我有一个通用测试套件,它尝试创建一个 ets 表以用于所有套件和所有测试用例。它看起来像这样:
-module(an_example_SUITE).
-include_lib("common_test/include/ct.hrl").
-compile(export_all).
all() -> [ets_tests].
init_per_suite(Config) ->
TabId = ets:new(conns, [set]),
ets:insert(TabId, {foo, 2131}),
[{table,TabId} | Config].
end_per_suite(Config) ->
ets:delete(?config(table, Config)).
ets_tests(Config) ->
TabId = ?config(table, Config),
[{foo, 2131}] = ets:lookup(TabId, foo).
该ets_tests
函数因 badarg 而失败。为每个测试用例创建/销毁 ets 表,如下所示:
-module(an_example_SUITE).
-include_lib("common_test/include/ct.hrl").
-compile(export_all).
all() -> [ets_tests].
init_per_testcase(Config) ->
TabId = ets:new(conns, [set]),
ets:insert(TabId, {foo, 2131}),
[{table,TabId} | Config].
end_per_testcase(Config) ->
ets:delete(?config(table, Config)).
ets_tests(Config) ->
TabId = ?config(table, Config),
[{foo, 2131}] = ets:lookup(TabId, foo).
运行它,我发现它的功能很漂亮。
我对这种行为感到困惑,无法确定为什么会发生这种情况,形成文档。问题:
- 为什么会这样?
- 如何在每个套件和每个测试用例之间共享一个 ets 表?