Testing Erlang测试工具包

Testing Erlang测试工具包,testing,erlang,Testing,Erlang,有没有类似于Akka的Erlang测试框架 目标是在集成环境中测试流程,例如,向一端的一组流程发送一些消息,并断言在另一端发出的结果消息。Akka测试工具包使这类测试变得相当简单,但我还没有在Erlang中找到等价的测试 编辑:作为我正在寻找的最简单的例子,假设我们有一个进程a,它将向进程B发送消息,我想测试一下这种行为 在Akka中,我可以基于TestKit类实例化一个actor,该类有一个内置方法expectMsg。所以我的测试是这样的: 实例化一个模拟B参与者 实例化A参与者(以某种方式

有没有类似于Akka的Erlang测试框架

目标是在集成环境中测试流程,例如,向一端的一组流程发送一些消息,并断言在另一端发出的结果消息。Akka测试工具包使这类测试变得相当简单,但我还没有在Erlang中找到等价的测试

编辑:作为我正在寻找的最简单的例子,假设我们有一个进程a,它将向进程B发送消息,我想测试一下这种行为

在Akka中,我可以基于TestKit类实例化一个actor,该类有一个内置方法
expectMsg
。所以我的测试是这样的:

  • 实例化一个模拟B参与者
  • 实例化A参与者(以某种方式获得对B的引用)
  • 给B发个信息
  • 调用B.expectMsg以验证它是否收到消息(注意
    • 这会自动确保没有其他类型的消息发送到B,并且
    • 您可以选择提供一个超时)
Erlang中是否有支持这种工作流的库?据我所知,EUnit和CT都不支持这种测试


要了解更复杂的断言,请参阅本页:

Erlang本身使这些类型的测试非常简单。有,也有用于大规模集成测试的框架

编辑: 对于这些简单的事情,您只需要Erlang:

$ 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>

流程
A
echo:start/0
启动,流程
B
是测试流程本身。如果您想要模拟现有模块,则存在。如果您只想观看两个进程之间的消息而不干扰接收器代码,您当然可以使用Erlang VM本身的跟踪功能。

请您看看我更新的问题,可能原始问题太模糊了。。。