2010-12-05 24 views
5

私はEmacsを使用しており、ユニットテストの作業フローをできるだけ自動化しようとしています。私はそれが動作するように設定しているが、Erlang Shellが自分の変更を認識する前に、テスト中のモジュールまたはテストを含むモジュールを手動でコンパイルする必要があります。Erlangで単体テストを行う際のモジュールリロードを自動化するには?

私はmymodule.erlmymodule_tests.erlの2つのファイルを持っています。私は何をできるようにしたいのです:

  1. 保存mymodule_testsをmymodule_testsするためのテストケースを追加し、スイッチErlangのシェルへ
  2. eunit:test(mymodule)またはmymodule_tests:test()
  3. のような1行でテストを実行し、
  4. 実際にテストを実行する前に、Erlangがmymoduleとmymodule_testsをリロードしました。

私はtrを持っています私自身のテスト方法を書いていますが、うまくいきません。

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

また、私はmymodule_testsの更新時のmymoduleを自動的にリロードする得ることができるかどうかを確認するためにmymodule_testsに-compile(mymodule).を置くことではなく、無駄にしようとしています。

私もかなりグーグルではありますが、関連する情報は見つかりませんでした。私がErlangを初めて知りましたので、間違った言葉を探していると思います。 erlang reload module、または別のモジュールをコンパイルするときに他のモジュールをリロードできないようにする必要があります。

+0

'Test = fun(Atom) - > S = atom_to_list(A)、c(A)、c(S ++" _ tests ")、eunit:を実行している.erlangファイルに、 'test(module)'と呼ばれるテスト(A)end'を実行し、各テストの前にすべてを自動的にコンパイルして読み込みます。 –

答えて

9

多分Erlang makeがお手伝いします。

ドキュメントからの読み取り
make:all([load]). 

この関数は、最初のEmakefileという名前のファイル ため 現在の作業ディレクトリを検索します(下記参照)をコンパイルするモジュールの セットと コンパイルを指定します使用するオプション。そのような ファイルが見つからない場合、 コンパイルモジュールのセットは、現在の作業ディレクトリ のすべてのモジュールにデフォルト設定されます。

そして "ロード" オプションについて:

ロードモードを。すべての再コンパイルされたモジュール をロードします。

チェックするモジュールのリストを指定できるmake:files/1,2もあります。

+1

はい!それは私の期待通りに機能します。ありがとう! –

2

モジュールをコンパイルした後にl(mymodule).を使用してリロードしましたか?

+0

私は十分分かりませんでした。私が 'mymodule'と' mymodule_tests'のために通常の 'C-c C-k'を実行すれば問題はありません。私はテストを実行する前にErlangまたはEmacsが自動的にモジュールをコンパイルする方法を考え出しています。 –

関連する問題