2016-09-23 10 views
1

私はテストしたいフローがあります。フローにはHTTPインバウンドコネクタがあり、フロー自体はRESTfulなサービスとして動作します。MUnit MuleテストのHTTP URLパラメータを設定する

フローには、いくつかのURLパラメータが設定されていることが必要であり、標準の表記である#[message.inboundProperties.'http.query.params'.test]を使用してこれらのパラメータにアクセスします。

私はこのフローをMUnitでテストしたいと考えています。フローに対してデフォルトのMUnitテストを作成すると、MUnitは元のフローを呼び出すためにflow-refを作成します。しかし、このテストの実行はただちに失敗します。なぜなら、フローはHTTPによって呼び出されることを想定しており、URLパラメータが設定されていると想定しているからです。

これは私が今いるところです。 flow-refを呼び出す前にこれらの変数を設定して、フローが正常に処理できるようにしたいと思います。一つはさまざまなプロパティを手動MessagePropertyMapContextをインスタンス化し、flow-refコンポーネントを交換http.query.params可変

  • に割り当てる
  • を設定することができmunit:set成分を、使用

    • Iは、いくつかのことを試みましたHTTPコンポーネントを使用し、実際のHTTPメッセージでフローを呼び出します。

    これらはすべて正しく動作していないようです。

    変数設定は常に失敗するようで、変数にアクセスしようとするとNullPointerExceptionになります。

    HTTPコンポーネントを使用してフローを呼び出すことは動作しません。これは、Muleがテスト用にポートをランダムに割り当てているため実行時にこのポートにアクセスできないように見えるためです。したがって、私はエンドポイントを呼び出す方法がありません。

    私は他の場所で同様の質問herehereを探しましたが、彼らは私を助けてくれないようです。

    私の基本的な質問は、MUnitテストからテストされたときに、フローによってアクセスできるURLパラメータを設定する方法です。代わりに私がここで達成しようとしていることを達成するためのより良い方法はありますか?

    ありがとうございました!

  • 答えて

    0

    これは、Muleのドキュメントには、あなたが一生懸命見れば答えがあることが分かります; 答えは右hereです。

    あなたは自分のMUNITテストフロー(このコンポーネントのごミュールパレットで「セットメッセージ」の検索)の開始時にmunit:setコンポーネントを追加する必要があります。

    <munit:set payload="#['']" doc:name="Set HTTP query params"> 
        <munit:inbound-properties> 
         <munit:inbound-property key="http.query.params" value="#[['transactionId': 'x873h3dj']]"/> 
        </munit:inbound-properties> 
    </munit:set> 
    

    これは、パラメータのペアtransactionId: x873h3djを作成し、必要に応じてコード内でアクセスすることができます。 あなたは、通常のMEL構文に応じて、以下の構造を拡張することで、より多くのパラメータを追加することができます。

    #[['key1':'val1', 'key2': 'val2', 'key3': 'val3']] 
    
    3

    @TroySを使用すると、次のコードを試すことができます。それは私のために働いた。

    <munit:set payload="#['']" doc:name="Set Message url_key:payload_1"> 
         <munit:inbound-properties> 
          <munit:inbound-property key="http.query.params" value="#[['url_key':'payload_1']]"/> 
         </munit:inbound-properties> 
        </munit:set> 
    
    関連する問題