免責事項:この質問の作者は、主にErlang/OTPの理論的知識を持っています。
myapp/ebin
を介してディレクトリ内の非Erlang実行可能ファイルを呼び出す小さなOTPアプリケーションがありますopen_port()
。アプリケーション自体を実行すると、すべてがうまくいき、実行可能ファイルへのポートが正常に開かれます。
しかし、アプリケーションの単体テストを実行しようとすると、open_port()
失敗に依存するものが失敗します。EUnit
これは、アプリケーションを起動したときに、の下で実行可能ファイルを見つけようとするためmyapp/.eunit/ebin
です。
アプリケーション自体のコードを変更せずに、その動作を変更するにはどうすればよいですか?アプリケーション自体を実行するときと同じ現在のディレクトリでEUnitテストを実行するにはどうすればよいですか?(つまり、EUnitを実行できるようにするためだけに、実行可能ファイルへのパスを提供するコードを変更することはお勧めできません)。
編集:Erlangメーリングリストのアドバイスに従いましたが、をcode:priv_dir(myapp_name)
返します{error, bad_name}
。
編集:ファイルが含まれていて、ファイルとファイルの両方が.eunit/
含まれていることがわかります。今、私は完全に迷子になっています。を実行すると、コマンドを実行します。このコマンドは、ディレクトリ内の対応するファイルを呼び出すディレクトリ内の各ファイルを呼び出します(ファイルがテスト中に実行されたことを明確に示しています)。なんでそうなの?なぜ代わりにディレクトリからファイルを実行する必要があるのですか?modulename.beam
ebin/
modulename.beam
modulename_tests.beam
make test
rebar
eunit
modulename_tests.beam
ebin/
modulename.beam
.eunit/
filename:absname("")
modulename.beam
.eunit/
modulename.beam
.eunit/
ebin/
myapp/ebin
とにまったく同じ.beamファイルが必要なのはなぜmyapp/.eunit/ebin
ですか?
PS公式ドキュメントを読みましたが、解決策が見つかりませんでした。