ska*_*tek 2 erlang erlang-otp erlang-ports eunit
免责声明:这个问题的作者主要具有 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我看了官方文档,没有找到解决办法。