Erlang的TestKit

时间:2015-09-27 09:58:28

标签: testing erlang

是否存在任何类型的Erlang测试框架,类似于Akka中的TestKit

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

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

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

  • 实例化模拟B演员
  • 实例化A actor(以某种方式获取对B的引用)
  • 向B发送消息
  • 调用B.expectMsg以验证它是否收到了消息(请注意
    • 这会自动确保没有其他类型的消息发送到B和
    • 您可以选择提供超时)

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

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

1 个答案:

答案 0 :(得分:5)

Erlang本身使这些测试相当简单。有Lightweight Unit Testing Framework for Erlang eunitCommon Test框架可用于高规模集成测试。

修改: 你不需要比Erlang更简单的事情:

activityIndicator.center = self.view.center

流程$ 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正在测试流程本身。如果您想要模拟现有模块,则meck。如果您只想在两个进程之间观看消息而不弄乱接收器代码,您当然可以使用Erlang VM本身的跟踪功能。