Как автоматизировать перезагрузку модуля при модульном тестировании с Erlang? - PullRequest
5 голосов
/ 05 декабря 2010

Я использую Emacs и пытаюсь максимально ускорить процесс модульного тестирования.Я настроил его так, что он работает, но мне нужно вручную скомпилировать тестируемый модуль или модуль, содержащий тесты, прежде чем оболочка Erlang распознает мои изменения.

У меня есть два файла mymodule.erl и mymodule_tests.erl.Я хотел бы иметь возможность:

  1. Добавить тестовый пример к mymodule_tests
  2. Сохранить mymodule_tests
  3. Переключиться на оболочку Erlang
  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().

Я также попытался, поместив -compile(mymodule). в mymodule_tests, чтобы посмотреть, смогу ли я получить мой модуль для автоматической перезагрузки при обновлении mymodule_tests, но безрезультатно.

Я также немного погуглил, но не могу найти нужную информацию.Поскольку я новичок в Erlang, я думаю, что я либо ищу неправильные термины, например, erlang reload module, либо вы не сможете перезагрузить другие модули при компиляции другого модуля.

Ответы [ 2 ]

9 голосов
/ 05 декабря 2010

Может быть, Erlang make может вам помочь.

make:all([load]).

Чтение из документа:

Эта функция сначала ищет в текущем рабочем каталогефайл с именем Emakefile (см. ниже), определяющий набор модулей для компиляции и используемые параметры компиляции.Если такой файл не найден, набор модулей для компиляции по умолчанию для всех модулей в текущем рабочем каталоге.

А в отношении опции «load»:

LoadРежим.Загружает все перекомпилированные модули.

Также имеется make:files/1,2, который позволяет указать список проверяемых модулей.

2 голосов
/ 05 декабря 2010

Вы пытались использовать l(mymodule). для перезагрузки модуля после его компиляции?

...