簡體   English   中英

使用 rebar3 時如何調試運行的 Eunit 測試套件?

[英]How to debug my Eunit test suite run when using rebar3?

我用 rebar3 (beta-4) 創建了一個release應用程序。 添加了一些 eunit 測試並編寫了一些代碼。

現在我必須調試一個測試用例,看看我必須添加什么才能使實現正常工作。

我從 Erlang 控制台找到了一些關於使用dbg的文章,並且找到了如何從 Eunit 編寫調試信息。 但是我需要從我必須測試的代碼中獲取信息(實際實現(邏輯))。

rebar3eunit參數一起使用時,有沒有辦法調試 Erlang 代碼(實際源代碼,而不是測試代碼)?

我在終端中使用跟蹤: https ://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/

一種方法是使用rebar3在測試配置文件下運行 shell,然后啟動調試器並設置斷點等:

$ rebar3 as test shell
...
1> debugger:start().
{ok, <0.67.0>}

這將彈出 調試器 GUI 調試器設置並准備就緒后,在eunit下運行測試:

2> eunit:test(your_test_module,[verbose]).
======================== EUnit ========================
your_test_module: xyz_test_ (module 'your_test_module')...

假設您在調試器中設置了一個合適的斷點,這將命中它,但您可能會遇到這種方法的問題:默認情況下, eunit測試在 5 秒后超時,這不會給您太多時間進行調試. 您需要為測試指定更長的超時時間,這就是為什么上面的示例顯示正在運行的是名為xyz_test_測試夾具,它用較長的超時時間包裝實際測試。 這樣的夾具非常簡單:

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

xyz_test_() ->
    {timeout,3600,
     [fun() -> ?assertMatch(expected_value, my_module:my_fun()), ok end]}.

在這里,實際測試是匿名函數,它與my_module:my_fun/0的返回值相匹配,在這個例子中它代表被測試的業務邏輯。 此示例夾具將測試超時設置為一小時; 您當然可以根據應用程序的需要進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM