2015-09-27 30 views
2

是否有類似於Akka的TestKit Erlang的測試框架?Erlang的TestKit

目標是在集成環境中測試進程,例如,在一端發送一些消息給一組進程並斷言在另一端產生的消息。 Akka Testkit使得這些測試非常簡單,但是我還沒能在Erlang中找到相應的測試。

編輯:作爲我正在尋找的最簡單的例子,假設我們有一個流程A,預計會向流程B發送消息,並且我想測試此行爲。

在Akka中,我可以基於TestKit類實例化一個actor,該類具有內建方法expectMsg。所以,我的測試是這樣的:

  • 實例化一個模擬乙演員
  • 實例化一個演員(它獲取的參考以某種方式B)
  • 發送B中的消息
  • 呼叫B.expectMsg驗證它接收到的消息(請注意,
    • 這自動確保沒有其它類型的消息被髮送到B,並
    • 可以任選地提供一個超時)

是否有支持這種工作流程在二郎一個圖書館嗎?據我所知,EUnit和CT都不支持這種測試。

要獲得更多複雜的斷言的想法,請參閱以下網頁:http://doc.akka.io/api/akka/2.0/akka/testkit/TestKit.html

回答

5

二郎本身使得這些類型的測試非常簡單。有Lightweight Unit Testing Framework for Erlang eunitCommon Test框架的高規模集成測試。

編輯: 你不需要什麼比二郎神更多的這樣簡單的事情:

$ cat echo.erl 
-module(echo). 

-export([start/0, send/3]). 

start() -> 
    spawn_link(fun() -> 
         receive 
          {To, Msg} -> To ! Msg 
         end 
       end). 

send(Echo, To, Msg) -> 
    Echo ! {To, Msg}. 

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

echo_test_() -> 
    Msg = "Hello world!", 
    {timeout, 0.1, fun() -> 
          Echo = echo:start(), 
          echo:send(Echo, self(), Msg), 
          ?assertEqual(Msg, receive X -> X end) 
        end}. 
$ erlc echo.erl 
$ erl 
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] 

Eshell V7.0 (abort with ^G) 
1> eunit:test(echo, [verbose]). 
======================== EUnit ======================== 
echo: echo_test_ (module 'echo')...ok 
======================================================= 
    Test passed. 
ok 
2> 

過程Aecho:start/0啓動和處理B是測試過程本身。如果你想模擬現有的模塊有meck。如果您只想在兩個進程之間觀看消息而不干擾接收方代碼,那麼您當然可以使用Erlang VM本身的跟蹤功能。

+0

請你可以看看我更新的問題,也許原來是太模糊... – egbokul

+0

這是一個很好的例子,首先,謝謝! – egbokul