首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TestKit给Erlang

TestKit给Erlang
EN

Stack Overflow用户
提问于 2015-09-27 09:58:27
回答 1查看 88关注 0票数 2

是否有类似于Akka中的TestKit的Erlang测试框架?

目标是测试集成环境中的进程,例如,向一端的一组进程发送一些消息,并断言在另一端发出的结果消息。Akka Testkit使这类测试相当简单,但我还未能在Erlang中找到相应的测试。

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

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

  • 实例化模拟B演员
  • 实例化A参与者(它以某种方式获得了对B的引用)
  • 向B发送信息
  • 调用B.expectMsg以验证它是否收到了消息(注意,
    • 这将自动确保不向B发送其他类型的消息,并且
    • 您可以选择提供超时)

在Erlang中有支持这种工作流的库吗?据我所知,EUnit和CT都不支持这种测试。

要了解更复杂的断言,请参见以下页面:http://doc.akka.io/api/akka/2.0/akka/testkit/TestKit.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-27 10:15:39

Erlang本身使这类测试相当简单。有eunit共同测试框架用于高规模的集成测试。

编辑:对于这样简单的事情,您只需要Erlang就行了:

代码语言:javascript
复制
$ 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>

Process Aecho:start/0启动,process B正在测试流程本身。如果您想要模拟现有的模块,那么就有meck。如果您希望只查看两个进程之间的消息而不干扰接收方代码,那么当然可以使用Erlang本身的跟踪功能。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32806695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档