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

时间:2010-12-05 11:01:06

标签: unit-testing emacs erlang

我正在使用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
  6. 我已经尝试编写自己的测试方法,但它不起作用。

    -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().
    

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

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

2 个答案:

答案 0 :(得分:9)

也许Erlang make可以帮到你。

make:all([load]).

阅读文档:

  

此功能首先查看   文件的当前工作目录   命名为Emakefile(见下文)   要编译的模块集和   编译要使用的选项。如果没有这样的话   找到文件,将模块集合到   编译默认为。中的所有模块   当前的工作目录。

关于“加载”选项:

  

加载模式。加载所有重新编译   模块。

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

答案 1 :(得分:2)

您是否尝试使用l(mymodule).在编译后重新加载模块?