몇 가지 응용 프로그램과 함께 중형 릴리스가 있습니다. 필자는 최근에 릴리스 된 라이브러리 응용 프로그램에 일부 일반 기능을 리팩터링했습니다. 이로 인해 라이브러리 애플리케이션이 필요한 모든 것을 테스트 할 때마다 내 EUnit 테스트가 undef
개의 메시지로 실패했습니다.Erlang 라이브러리 응용 프로그램을 사용하는 EUnit 테스트 모듈
% In apps/utils/src/utils.erl
-module(utils).
-export([foo/0]).
foo() -> "OH HAI".
그런 다음
% In apps/some_app/src/some_app.erl
-module(some_app).
-export([bar/0]).
bar() -> io:format("foo: ~s~n", [utils:foo()]).
% unit tests for bar()
그런 some_app:bar()
에 대한 단위 테스트가 실패 :
세트 업이 같은 것입니다. 나는 그들을 rebar eunit skip_deps=true
으로 돌리고있다. 내 릴리스에서는 타사 응용 프로그램 (SQL 등)을 사용하기 때문에 skip_deps=true
을 사용하고 있습니다.
EUnit이 종속성없이 테스트중인 앱을 호출하기 때문에 테스트가 시작되지 않는다고 가정합니다. 이 문제를 해결할 방법이 있습니까? 종속성을 명시 적으로 선언하도록 .app 파일을 구성했습니다. 그것은 릴리스에서 잘 작동하고, 아무런 문제없이 지금은 약 1 일 동안 배포되었지만, 다시 테스트를 통과 할 수 있다면 훨씬 나아질 것입니다. :)
(나는 조롱 앱을 사용할 수 있습니다. utils:foo/0
을 그루터기로 만들었는데, 그 부분이 관용적으로 이상적인지 알 수 있지만 utils:foo/0
(읽기 : 실물과 비슷합니다)은 정말 간단한 작업을 수행하기 때문에 잔인한 것처럼 보입니다.
나는 이것이 EUnit 자체와 아무 관련이 없다고 생각하지만 Rebar가 테스트를 어떻게 수행하고 있는지 생각해보십시오. skip_deps를 사용할 때 단순히 다른 응용 프로그램을 컴파일하지 않기 때문에 또는 이전에 컴파일 된 경우에도 Erlang 코드 경로에 추가하지 않기 때문입니다. – RichardC
철근 소스를 파헤쳐 야한다고 생각합니다./sk * skip_deps' 플래그는'deps' 디렉토리 (제 3 자의 물건에 사용되는)에서 단위 테스트를 건너 뛴다고 생각합니다. – dantswain
철근 소스를 보면서 알 수있는 한, 'skip_deps'는 rebar가'deps' 디렉토리에서 응용 프로그램을 건너 뛰도록 알려줍니다. – dantswain