我是Erlang的新手。它有2個測試框架:EUnit和通用測試。我很困惑什麼時候使用另一個。有人可以向我解釋EUnit與普通測試相比有什麼優勢,反之亦然。看起來普通測試可以完成EUnit可以做的一切以及更多,不知道我應該使用EUnit。謝謝!EUnit與普通測試
回答
Eunit非常簡單,適合在白盒級進行模塊測試或庫測試。它被整合到螺紋鋼中。
通用測試更多地面向黑盒測試和應用程序以及應用程序測試系統。它非常容易帶有測試覆蓋率。
編輯(後安迪評論):
這是正確的,你可以使用通用測試單一白盒測試,以及它是正確的,你可以利用eunit使用固定裝置的一些應用測試。
然而,eUnit對於簡單的單一測試非常方便:您可以編寫函數myFun,在測試模塊中添加測試函數myFun_test或測試生成器myFun_test_(用於測試很多模式,甚至是一些測試中的失敗)就是這樣。你可以隨心所欲地運行它(沒有測試歷史)。
通用測試要求您列出全部函數或組中的每個測試用例。據我所知,它沒有測試生成器,因此不容易通過每個函數的所有測試模式。這就是爲什麼我認爲它不適應單一的白盒測試。另一方面,當init_per_testcase,init_per_group ...需要一些應用程序上下文運行時,它比eunit fixtures更靈活地組織測試。通用測試還會保留在日誌目錄中完成的所有測試的歷史記錄,這很好,但我建議限制運行次數以保持其有用性。
編輯:
爲了避免不導出函數的問題,對於eunit和通用試驗,其能夠使用定義。例如在rebar.config(因爲我使用的eunit測試單獨的文件):
{eunit_compile_opts, [{d,'EUNIT_TEST',true}]}.
{erl_opts, [debug_info, warn_export_all]}.
,並在一個模塊中,如果有必要:
%% export all functions when used in eunit context
-ifdef(EUNIT_TEST).
-compile(export_all).
-endif.
您可以驗證它只能修改編譯對於eunit
D:\git\helper>rebar clean eunit compile
==> helper (clean)
==> helper (eunit)
Compiled test/help_list_tests.erl
Compiled test/help_ets_tests.erl
Compiled test/help_num_tests.erl
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
src/help_num.erl:6: Warning: export_all flag enabled - all functions will be exported
Compiled src/help_num.erl
Compiled src/help_code.erl
All 31 tests passed.
Cover analysis: d:/git/helper/.eunit/index.html
==> helper (compile)
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
Compiled src/help_num.erl
Compiled src/help_code.erl
Learn you some erlang(Erlang的最好的在線資源之一,除了官方的文檔)的代碼說明這兩種方法非常好:
正如帕斯卡指出,EUnit最好是在白盒測試中使用的,更喜歡內部功能由功能單元測試,光集成測試。
Common Test做的比較繁重:集成&系統測試,黑盒子的東西。當然,它也更復雜,功能更強大。
當你在它的時候,你可能會嘗試使用Erlang/OTP中的另一個集成測試工具Dialyzer,它非常適合查找死亡或無法訪問的代碼,邏輯&類型錯誤(它是一個靜態類型分析器)。再次,瞭解你一些erlang提供了一個很好的介紹:Dialyzer。噢,順便說一下,如果您選擇將EUnit測試放在不同的文件中(這是完全可能的),那麼您將無法測試未導出的函數(這是預期的)。還有一個預期是Common Test不測試未導出的函數:否則它不會是一個黑盒測試工具(可能是一個作弊的測試工具)。
從http://www.erlang.org/doc/apps/common_test/basics_chapter.html:
常用的測試也是白盒測試二郎山代碼的一個非常有用的工具(例如,模塊測試),因爲測試程序可以調用直接出口二郎功能並有實現需要非常小的開銷基本測試套件和執行簡單測試。對於黑盒測試Erlang軟件,例如可以使用Erlang RPC以及標準的O接口。
- 1. eunit測試超時
- 2. Nunit基礎類與普通測試
- 3. Eunit測試不會等待接收
- 4. EUnit無法測試私人函數
- 5. eunit測試發送的消息
- 6. 什麼是EUnit測試生成器?
- 7. 將MSpec測試轉換爲普通NUnit
- 8. 以普通PHP進行單元測試
- 9. PHP PDO與普通的mysqli速度性能基準測試
- 10. 與普通綴
- 11. 與普通數據
- 12. 與普通標籤
- 13. EUnit查看測試結果的詳細信息
- 14. Erlang EUnit提供更人性化的測試訊息?
- 15. 哪裏可以放置eunit的測試文件?
- 16. 如何不符合鏈接Rebar3 eunit測試的priv目錄?
- 17. Erlang eunit測試跳過(沒有代碼改變!)
- 18. 依賴於庫應用程序的Erlang EUnit測試模塊
- 19. 如何使用eunit測試gen_server內部狀態
- 20. 使用普通的JRE Junit測試可以測試Android應用程序嗎?
- 21. Android的測試項目 - 閱讀資產文件來測試普通Java對象
- 22. 如何使用普通JDBC和HSQLDB與DBUnit進行測試而不面臨NoSuchTableException?
- 23. FactoryClass與普通Java類
- 24. 蟒蛇:與普通場
- 25. 聚合函數與普通
- 26. 與普通的鍵/值
- 27. 抽象與普通超類
- 28. 在Rails中將「普通」Ruby類的測試類放在哪裏?
- 29. 使用普通測試來檢查實例是否存在
- 30. 從一個普通類運行所有UI測試
謝謝帕斯卡。我和一些Erlang工程師交談過,我得到的唯一原因是common_test無法測試未導出的函數。 – user342673
這是不正確的,你在源模塊中嵌入測試,以便你可以測試任何你想要的。 –
我按照Andy的評論編輯了我的回答。我不知道如何使用通用測試,我在test_SUITE.erl模塊中編寫測試用例 – Pascal