0

我发现Eunit 上缺少关于如何测试多节点应用程序的文档。我找到了这个例子,但遗憾的是当我运行时:

cluster_test_() ->  
    {node, foo,
     fun (Node) ->
        [?_assertEqual(pong, net_adm:ping(Node))]
     end
    }.

我得到:

undefined
*** context setup failed ***
** in function slave:start/5 (slave.erl, line 197)
**exit:not_alive

我在这里做错了吗?

作为旁注,我还在这里查看了 gproc 的分布式测试,但它是手动启动许多从节点,而不是使用内置的 Eunit 功能。

有人可以给我一些如何使用node测试夹具的例子吗?

谢谢,

4

4 回答 4

0

我的建议是您在禁用分发的情况下运行您的主节点。使用密钥启用它-sname(我假设您的示例代码位于模块中node_test):

> erl -sname master
(master@hostname)1> c(node_test).
> node_test:test().

但这还不是全部。要在新版本的 erlang 中运行此代码,您应该进行一些更改:

cluster_test_() ->  
    {node, foo,
     fun ({Node, StopNet}) ->
        ?debugFmt("Node ~p", [Node]),
        ?debugFmt("StopNet ~p", [StopNet]),
        [?_assertEqual(pong, net_adm:ping(Node))]
     end
    }.

注意,函数参数现在不包含节点名称,而是包含两个元素的元组。第一个元素是远程节点名称,第二个元素是布尔标志,它总是假的(至少现在是这样)。有关更多详细信息,请参阅eunit 源

于 2014-10-25T21:56:28.050 回答
0

Common Test是专门为测试更大的系统而编写的。

其他官方文档你可以在这里找到很好的主题介绍。最后一章以如何将现有的 eunit 测试集成到 Common Test中的小片段结束。

于 2014-10-23T18:34:54.677 回答
0

嗯,我从来没有让从节点功能正常工作,所以它不应该是一个记录的功能。我猜它最终出现在文档中,而我仍然认为它正在工作。我可能不得不修复文档。

于 2014-10-24T07:32:44.410 回答
0

如果您要进行多节点测试并记住 eunit,那么模块中的 eunit ifdefs 将更改它的校验和,如果您说有一个模块使用 ifdef eunit 编译而另一个不是,则尝试调用远程函数时会出错。

于 2014-10-25T09:49:38.377 回答