我遇到了 Common Test 以及我为我测试的应用程序指定配置的方式的问题。我有几个测试套件集合,其中每个测试套件集合都有一个 ct_hook 模块来设置一些东西。
我配置要测试的应用程序的方式是先调用application:load/1
,然后application:set_env/3
再调用application:ensure_all_started/1
。对于测试套件的单个(集合),这很好用。但是,当我运行时rebar3 ct
,它(自然)会连续运行多个测试套件,如果我需要配置一个将在以后运行中使用的应用程序,那么application:set_env/3
如果该应用程序已经加载,那么调用就太晚了在早期套件的 ct_hook 中间接(作为依赖项 - 甚至是依赖项的依赖项):
init/2
在first_ct_hook
:
% loads app_a, but also its dependency app_b and *app_b's* dependency app_z:
application:load(app_a),
application:set_env(app_a, database, my_db_config),
% …
% great success!
init/2
在
second_ct_hook
:
application:load(app_b), % loads app_b (its dependency app_z is already loaded)
application:set_env(app_a, database, my_db_config),
application:set_env(app_z, important, my_important_config), % oh no! too late!
这样做的正确方法是什么?