第15章 ワークフローのテスト駆動開発


15.1. ワークフローのテスト駆動開発の概要

この章では、拡張機能なしで JUnit を使用してカスタムプロセス定義のユニットテストを実行する方法を説明します。
開発サイクルはできるだけ短期間にします。ソフトウェアソースコードへの変更は (可能であれば、中間のビルド手順なしで) すべて即座に検証します。 次の例は、このような方法で jBPM プロセスを開発およびテストする方法を示しています。
ほとんどのプロセス定義ユニットテストは実行ベースです。各シナリオは 1 つの JUnit テストメソッドで実行します。テストメソッドは、外部トリガー (シグナル) をプロセス実行に送信します。続いて各シグナルの後に検証を行い、プロセスが期待される状態にあることを確認します。
以下は、このようなテストのグラフィカルな表現の例です。ここでは、シンプルなオークションプロセスを使用します。

図15.1 オークションのテストプロセス

次に、メインシナリオを実行するテストを記述します。
public class AuctionTest extends TestCase {

  // parse the process definition
  static ProcessDefinition auctionProcess = 
      ProcessDefinition.parseParResource("org/jbpm/tdd/auction.par");

  // get the nodes for easy asserting
  static StartState start = auctionProcess.getStartState();
  static State auction = (State) auctionProcess.getNode("auction");
  static EndState end = (EndState) auctionProcess.getNode("end");

  // the process instance
  ProcessInstance processInstance;

  // the main path of execution
  Token token;

  public void setUp() {
    // create a new process instance for the given process definition
    processInstance = new ProcessInstance(auctionProcess);

    // the main path of execution is the root token
    token = processInstance.getRootToken();
  }
  
  public void testMainScenario() {
    // after process instance creation, the main path of 
    // execution is positioned in the start state.
    assertSame(start, token.getNode());
    
    token.signal();
    
    // after the signal, the main path of execution has 
    // moved to the auction state
    assertSame(auction, token.getNode());
    
    token.signal();
    
    // after the signal, the main path of execution has 
    // moved to the end state and the process has ended
    assertSame(end, token.getNode());
    assertTrue(processInstance.hasEnded());
  }
}
Copy to Clipboard Toggle word wrap

15.2. XML ソース

実行シナリオを記述する前に、ProcessDefinition を構成する必要があります。ProcessDefinition オブジェクトを取得する最も簡単な方法は、XML を解析することです。コード補完をオンにして、ProcessDefinition.parse を入力します。さまざまな解析方法が表示されます。ProcessDefinition オブジェクトに解析できる XML を記述するには、次の 3 つの方法があります。

15.2.1. プロセスアーカイブの解析

プロセスアーカイブ は、プロセスの XML ファイル、つまり processdefinition.xml を含む ZIP ファイルです。jBPM Process Designer プラグインは、プロセスアーカイブの読み取りと書き込みを行います。
static ProcessDefinition auctionProcess = 
    ProcessDefinition.parseParResource("org/jbpm/tdd/auction.par");
Copy to Clipboard Toggle word wrap

15.2.2. XML ファイルの解析

processdefinition.xml ファイルを手動で記述するには、JpdlXmlReader を使用します。ant スクリプトを使用して、結果の ZIP ファイルをパッケージ化します。
static ProcessDefinition auctionProcess = 
    ProcessDefinition.parseXmlResource("org/jbpm/tdd/auction.xml");
Copy to Clipboard Toggle word wrap

15.2.3. XML 文字列の解析

プレーン文字列からインラインでユニットテストの XML を解析します。
static ProcessDefinition auctionProcess = 
    ProcessDefinition.parseXmlString(
  "<process-definition>" + 
  "  <start-state name='start'>" + 
  "    <transition to='auction'/>" + 
  "  </start-state>" + 
  "  <state name='auction'>" + 
  "    <transition to='end'/>" + 
  "  </state>" + 
  "  <end-state name='end'/>" + 
  "</process-definition>");
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat