3

TestNG を使用して、複数の Java プロセスにまたがる機能テストをどのように自動化しますか?

JUnit の代わりに TestNG を試してみることに興味を持ちました.TestNG は単体テスト以上の目的で設計されていると主張していますが、これを行う方法の具体的な例を見つけることができませんでした.

特別なハードウェアからのイベントをリッスンする Java プログラム (p1) があります。これらのコマンドを解析し、コマンドに基づいてアクションを実行する別の Java プロセス (p2) に送信します。

チェーン全体をテストするために、次のアドホック ソリューションを思いつくことができました。

  1. 「偽の」ハードウェア コマンドのリストを含むテキスト ファイルがあります。
  2. イベントをリッスンする代わりにテキスト ファイルを読み取るモックを p1 に追加しました。
  3. p1 を実行します (p2 はテスト環境で既に実行されています)。
  4. p2 のログ出力を比較して、リスト内のコマンドと一致することを確認します。

簡単なシェル スクリプトを使用してこれを行います - これは TestNG で自動化できますか?

4

2 に答える 2

2

はい、testNG を使用して複数のスクリプトを簡単に自動化できます。

TestNG はデータ駆動型テストをサポートしています。つまり、テスト メソッドに渡されてチェック (アサーション) を実行するメソッド内のすべてのデータを提供します。また、これはすべて Annotation を介して行われるため、そのためのコードを記述する必要はありません。

Eclipse のような IDE を使用することをお勧めします (まだ使用していない場合)。Eclipse 用のプラグインが用意されています。日食を通して; テストケースの作成とその自動化が非常に簡単になります。グーグルすることをお勧めします。十分な例が見つかります。

また、Junit 4 も同様に優れています。

于 2012-11-09T05:09:43.660 に答える
2

あなたが持っているのは、複数のプロセスにまたがる実行環境です。つまり、テスト環境では、必要に応じてこれらのプロセスを自動的に作成できる必要があります。基本的な流れは標準的です: セットアップ、複数のテスト、ティアダウン。ただし、セットアップ ルーチンとティアダウン ルーチンは、プロセスの開始と停止、入力の初期化、テスト固有の環境引数の提供などを行う必要があります。

p1あなたが説明したことから、プログラムがJavaであることは問題ではないようです。を使用java.lang.Runtimeして実行できますp1。ハードウェアの動作を模擬する必要があることは既に予想しているのでp1、適切な統合テスト モードで実行する方法を既に知っていると思います。何らかの理由でさらに必要な場合は、デバッグと計測のためのインターフェースであるJVMTIRuntimeを参照してください。

テストの方法やテストの必要性によっては、各テスト ケースのプロセスを起動する際にパフォーマンスの問題が発生する場合があります。その場合、1 つのテスト セットに対して 1 つのプロセスが必要になります。この状況では、失敗する可能性のある資産を再利用しています。これは結局のところテスト環境であるためです。したがって、各テストの開始時にプロセスが実行されていることを確認する必要があります。これを確実にする 1 つの方法は、テスト ケースにメインのテスト対象オブジェクトを提供するファクトリ メソッドにチェックを入れることです。クラスjava.lang.Processはそれを直接許可しませんが、プロセスに標準入出力を提供します。それが利用可能であれば、そのチャネルに単純な「ping」インターフェースを実装するだけで十分です。他の種類の共有リソースも機能します。

于 2012-11-10T01:35:20.807 に答える