0

完全なエンド ツー エンド テストで、2 つ以上の Java クライアント間の相互作用をテストする必要があります。

GUI がなければ、理想的には (Junit 構文) のようなものにする必要があります。


@Test public void EndToEndTest(){ App firstApp = new App(); App secondApp = new App(); String msg = "something"; firstApp.send(msg); //this method will magically send msg to secondApp String msgReceived = secondApp.getLastMsg(); AssertEquals(msgReceived, msg); }

上記のコードは、「アプリ」を同じ VM で実行するため、私が望むものではありません。

私が自分で考えることができた解決策は、secondApps をインスタンス化し、そのすべての出力をファイルに書き込む偽のメインを作成し、システム コールで起動して結果を確認することでしたが、それは本当にやり過ぎのようです。さらに、そのような戦略では、GUI もテストするのが (不可能ではないにしても) 難しくなります。

ご協力ありがとうございました。

4

1 に答える 1

0

プロセス:

1つの解決策は、 Runtime.execを使用して別のプロセスを起動することです。これにより、そのプロセスを起動したプロセス内からそのプロセスを監視できます。この新しいプロセスは別のJVMで実行されます。フォークに相当します。

Java内で別のプロセスを管理するために処理する必要のあるスレッド化を扱う多くの警告があります。

このチュートリアルは役立つはずです:Runtime.exec()が機能しない場合

コミュニケーション:

複数のプロセスを相互に通信させる方法にはいくつかの種類があります。Runtime.execを使用している場合は、各プログラムのインストリームとアウトストリームの両方を介して通信できます。

これはかなり遅く、はるかに優れた解決策は、ソケットを使用して各プロセス間で直接通信することです。

于 2010-08-23T21:17:10.943 に答える