2013-01-13 79 views
2

我是Erlang的新手,剛剛通過Erlang的一些教程。從TDD背景來看,我認爲我應該在erlang中遵循一些TDD原則。我安排我的代碼如下如何讓erlang在當前目錄的子目錄中尋找模塊?

root 
|- tests 
| |- name_builder_tests.erl 
|- src 
| |- name_builder.erl 

我開始eralg殼root目錄。但我無法編譯我的erl文件,所以我必須在每次更改其中一個文件時切換到testssrc目錄,我需要編譯它們。

有什麼辦法可以告訴shell在編譯模塊或執行特定模塊的函數時在所有子目錄中查找模塊?我想要問的是,如果我的殼是root目錄我能成功地執行在做單元測試時,以下

c(name_builder). 
c(name_builder_tests). 

回答

1

我們組織這樣的代碼。

root 
|- test 
| |- name_builder_tests.erl 
|- src 
| |- name_builder.erl 
|- rebar 
|- rebar.config 

比運行'./rebar compile eunit'。 鋼筋腳本和文檔,你可以在這裏找到https://github.com/basho/rebar/wiki

+0

經過了很多關於將生產代碼與測試代碼分離的情況,我放棄了。與螺紋鋼一起去。它非常優雅。 – Suhas

1

的方法之一,是把同一模塊的生產代碼中測試:

-module(my_code). 
-export([run/0]). 

run() -> ok. 

-ifdef(TEST). 
-include_lib("eunit/include/eunit.hrl"). 

run_test() -> 
    ?assertEqual(ok, run()). 

-endif. 

這樣,你的測試就接近你了。 關於代碼的可用性,您應該運行使用「-pa」參數Erlang的外殼,並指定你的代碼的位置:

erl -pa src/ 

那是因爲你被默認編譯將把束文件與來源相同的文件夾。 但我會推薦使用螺紋鋼之類的東西,因爲它會讓你的生活更輕鬆。

HTH, 阿林

+0

我讀的辦法「把代碼和測試一個模塊中」,但說實話,我不喜歡那種方式。混合測試與生產代碼是一個壞主意,我猜。順便說一句,什麼是螺紋鋼? – Suhas

+0

使用rebar的建議基本上只是一種使用[標準OTP結構](http://learnyousomeerlang.com/building-otp-applications)構建應用程序的建議。 [鋼筋](https://github.com/rebar/rebar)只是一個工具,可以幫助。 – chops

+0

我懷疑你會發現混合測試和生產代碼在功能性編程語言中更加安全。您不必擔心全局變量或私有對象方法。 – macintux

1

你也可以使用Emakefile來做到這一點,以告訴編譯器在哪裏尋找源文件。

與以下內容

{'src/*', [debug_info, 
    {i, "src"}, 
    {i, "include"},  
    {outdir, "ebin"}]}. 
{'test/*', [debug_info, 
    {i, "src"}, 
    {i, "include"}, 
    {i, "test"},   
    {outdir, "ebin"}]}. 

創建一個在根目錄名爲Emakefile文件現在編譯使用erl -make這將使ebin/目錄內的所有文件.beam所有模塊。

然後運行命令erl -pa ebin/這將EBIN目錄添加到SYS路徑啓動shell

PS 1:我算是一個Erlang新手太多,我從this lesson

瞭解到這種方法從 Learn You Some Erlang,更確切地說

PS 2:如果您在該計劃比這更復雜的應用程序的工作,我會建議你檢查rebar

+0

繼續使用螺紋鋼,但我喜歡'Emakefile' appraoch – Suhas

相關問題