我有一箇中等規模的版本,只有少數應用程序。我最近在發行版中將一些常用功能重構爲一個庫應用程序。這使得我的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
運行它們。我正在使用skip_deps=true
,因爲我的發行版使用了一些第三方應用程序(SQL等)。
我認爲測試開始失敗,因爲EUnit正在調用測試中的應用程序而不依賴它?有沒有什麼辦法解決這一問題?我已經配置了.app文件來明確聲明依賴關係。它在發行版中工作正常,現在已經部署了一天沒有問題,但如果我可以再次通過測試,我會感覺好多了:)
(我可以使用模擬應用程序去掉utils:foo/0
,我可以看到這將是理想的地方,但這似乎在這種情況下矯枉過正,因爲utils:foo/0
(閱讀:它是真實世界的對應物)做一些非常簡單的東西。)
我認爲這與EUnit本身無關,但是Rebar如何運行測試。因爲它在使用skip_deps時不會編譯其他應用程序,或者因爲它不會將它們添加到Erlang代碼路徑中,即使它們以前已經編譯過。 – RichardC
我想我需要深入研究這個鋼筋來源:/我*想* skip_deps標誌只是跳過'deps'目錄中的單元測試(它用於第三方的東西)。 – dantswain
就我看到的鋼筋來源而言,「skip_deps」只是告訴鋼筋跳過'deps'目錄中的應用程序。 – dantswain