JUnit を使用して Java バッチ ジョブをテストできますか? Junit はローカルで実行され、Java バッチ ジョブはサーバー上で実行されるため、JUnit テスト ケースからジョブを開始する方法がわかりません (JobOperator クラスを使用してみました)。
JUnit が適切なツールでない場合、Java バッチ コードを単体テストするにはどうすればよいでしょうか。
WAS Liberty で実行されている JSR 352 の IBM の実装を使用しています
JUnit を使用して Java バッチ ジョブをテストできますか? Junit はローカルで実行され、Java バッチ ジョブはサーバー上で実行されるため、JUnit テスト ケースからジョブを開始する方法がわかりません (JobOperator クラスを使用してみました)。
JUnit が適切なツールでない場合、Java バッチ コードを単体テストするにはどうすればよいでしょうか。
WAS Liberty で実行されている JSR 352 の IBM の実装を使用しています
@GhostCat からの回答に基づいて、テストで完全な仕事 (彼の箇条書き 1.) を実行する方法を尋ねているようです。(もちろん、リーダー/プロセッサ/ライター コンポーネントを個別に単体テストすることも役立ちます。)
基本的なオプションは次のとおりです。
Arquillian (Arquillian と Liberty の使用を開始するためのリンクについては、こちらを参照) を使用してサーバーでテストを実行しますが、アプリをサーバーにデプロイして結果を収集するタスクは Arquillian に処理させます。
JobOperator インターフェイスを介してジョブを駆動する独自のサーブレット ハーネスを記述します。出発点については、この質問に対する@aguibert の回答を参照してください。ジョブがサブミッターに通知する他の方法がない限り、「終了」状態 (COMPLETED、FAILED、または STOPPED) のいずれかについて JobExecution をポーリングする独自の単純なルーチンを作成する必要があることに注意してください。
覚えておくべきもう 1 つの手法は、スタートアップ Bean です。次のようなスタートアップ Bean を使用してサーバーを起動するだけで、ジョブを実行できます。
@Startup
@Singleton
public class StartupBean {
JobOperator jobOp = BatchRuntime.getJobOperator();
// Drive job(s) on startup.
jobOp.start(...);
これは、JobOperator インターフェイス (サーバーにいる必要がある) を使用するのとは別に、ジョブの結果を確認する方法がある場合に役立ちます。テストでは、単純にジョブの結果をポーリングして確認できます。HTTP ポートを開く必要さえなく、サーバーの起動オーバーヘッドはわずか数秒です。
JUnit は、まず第一に、自動化およびテスト モニターフレームワークです。意味: これを使用して、あらゆる種類の @Test メソッドを駆動できます。
概念的な点から言えば、単体テストの定義はかなりあいまいです。ウィキペディアに従うと、「何かをテストするために行うすべてのこと」は単体テストと見なすことができます。もちろん、その観点に従って、バッチ フレームワークで実行されるバッチ コードを "単体テスト" することもできます。
しかし、ほとんどの人は、「真の」「役立つ」単体テストには外部のものの存在は必要ないと考えています。このようなテストは、ビルド時に「ローカル」で実行できます。サーバー、ファイル システム、ネットワーキングなどは不要です。
それを念頭に置いて、あなたが取り組むことができる2つのことがあると思います: