如何在使用Erlang进行单元测试时自动执行模块重新加载?

Rob*_*und 5 emacs erlang unit-testing

我正在使用Emacs并尝试尽可能自动化我的单元测试工作流程.我已将其设置为正常工作但我必须在Erlang Shell识别我的更改之前手动编译我的测试模块或包含测试的模块.

我有两个文件mymodule.erlmymodule_tests.erl.我希望能做的是:

  1. 将测试用例添加到mymodule_tests
  2. 保存mymodule_tests
  3. 切换到Erlang Shell
  4. 用一行运行测试,如eunit:test(mymodule)mymodule_tests:test()
  5. 让Erlang在实际执行测试之前重新加载mymodule和mymodule_tests

我已经尝试编写自己的测试方法,但它不起作用.

-module (mytests).
-export([test/0]).

-import(mymodule).
-import(mymodule_tests).
-import(code).

test() ->
    code:purge(mymodule),
    code:delete(mymodule),
    code:load_file(mymodule),
    code:purge(mymodule_tests),
    code:delete(mymodule_tests),
    code:load_file(mymodule_tests),
    mymodule_tests:test().
Run Code Online (Sandbox Code Playgroud)

我还尝试通过放入-compile(mymodule).mymodule_tests来查看我是否可以在更新mymodule_tests时自动重新加载mymodule,但无济于事.

我也搜索了相当多,但找不到任何相关信息.因为我是Erlang的新手,所以我想我正在寻找错误的术语,例如erlang reload module,或者在编译另一个模块时你不应该重新加载其他模块.

Rob*_*loi 9

也许Erlang make可以帮到你.

make:all([load]).
Run Code Online (Sandbox Code Playgroud)

从文档中读取:

此函数首先在当前工作目录中查找名为Emakefile的文件(见下文),指定要编译的模块集和要使用的编译选项.如果未找到此类文件,则要编译的模块集默认为当前工作目录中的所有模块.

关于"加载"选项:

加载模式.加载所有重新编译的模块.

还有一个make:files/1,2允许您指定要检查的模块列表.