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

Common Testは、特に大規模なシステムをテストするために作成されました。

他のその公式ドキュメントは、ここでテーマの非常に優れた紹介を見つけることができます。また、チャプターイベントは、既存の eunit テストを Common Test に統合する方法の小さなスニペットで終わります。

于 2014-10-23T18:34:54.677 に答える
0

うーん、私はスレーブ ノードの機能を適切に動作させたことがないので、文書化された機能ではありません。まだ機能していると思っていたのに、ドキュメントに載っていたと思います。おそらくドキュメントを修正する必要があります。

于 2014-10-24T07:32:44.410 に答える
0

私の提案は、ディストリビューションを無効にしてマスター ノードを実行することです。キーで有効にし-snameます(サンプルコードは module にあると思います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
    }.

関数の引数には、ノード名ではなく、2 つの要素を持つタプルが含まれていることに注意してください。最初の要素はリモート ノード名、2 番目の要素はブール値フラグで、常に false です (少なくとも今のところ)。詳細については、eunit ソースを参照してください。

于 2014-10-25T21:56:28.050 に答える
0

マルチノード テストを行っていて eunit を念頭に置いている場合、モジュール内の eunit ifdefs はチェックサムを変更します。また、あるモジュールが ifdef eunit でコンパイルされ、別のモジュールがコンパイルされていない場合、リモート関数を呼び出そうとするとエラーが発生します。

于 2014-10-25T09:49:38.377 に答える