免责声明:这个问题的作者主要有 Erlang/OTP 的理论知识。
我有一个小型 OTP 应用程序,它myapp/ebin通过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我已经阅读了官方文档并没有找到解决方案。