면책 조항 :이 질문의 저자는 대부분 Erlang/OTP에 대한 이론적 지식이 있습니다.왜 EUnit은 .beam 파일을 .eunit/ebin으로 컴파일합니까?
을 통해 myapp/ebin
디렉토리 내에서 Erlang이 아닌 일부 실행 파일을 호출하는 작은 OTP 애플리케이션이 있습니다. 응용 프로그램 자체를 실행하면 모든 것이 잘되고 실행 파일의 포트가 성공적으로 열립니다.
그러나 응용 프로그램에 대한 단위 테스트를 실행하려고하면 에 의존하는 테스트가 실패합니다. EUnit
으로 시작하면 응용 프로그램은 myapp/.eunit/ebin
에서 실행 파일을 찾으려고하기 때문에 실패합니다.
응용 프로그램 코드를 변경하지 않고 어떻게 동작을 변경할 수 있습니까? 응용 프로그램 자체를 실행할 때와 동일한 현재 디렉토리에서 EUnit 테스트를 어떻게 수행 할 수 있습니까? (나는 EUnit을 실행할 수 있도록 실행 파일에 대한 경로를 제공하는 코드를 변경하는 것이 좋지 않다는 것을 의미한다).
편집 : Erlang mailing list의 조언을 따르지만 code:priv_dir(myapp_name)
은 {error, bad_name}
을 반환합니다.
편집 : .eunit/
이 modulename.beam
파일을 포함하고 ebin/
이 modulename.beam
파일과 modulename_tests.beam
파일을 모두 포함되어 있음을 볼 수 있습니다. 이제 나는 완전히 잃어버린다. 내가 make test
를 실행하면 .eunit/
디렉토리에 해당 modulename.beam
파일을 (filename:absname("")
명확 modulename.beam
파일을 테스트하는 동안 .eunit/
에서 실행되는 것을 보여줍니다) 호출 ebin/
디렉토리의 각 modulename_tests.beam
파일을 호출 eunit
명령을 rebar
실행합니다. 왜 그래야만하지? ebin/
대신 .eunit/
디렉토리의 modulename.beam
파일을 실행해야하는 이유는 무엇입니까?
왜 우리는 실제로 동일한 .beam 파일을 myapp/ebin
및 myapp/.eunit/ebin
에 넣어야합니까?
P. 나는 official documentation을 읽고 해결책을 찾지 못했습니다.
친애하는 Chen,이 경로를 동적으로 추가 할 수있는 방법이 있습니까? 하드 코딩 된 값을 코드에 추가 : add_pathsz()는 다른 컴퓨터에서 코드로 작업 할 때 도움이되지 않습니다. – skanatek
코드를 추가하여 답장을 업데이트했습니다. –