名前も知らないSEでしょう

この木なんの木気になる樹

Java

Apache Camelのルートで用いるProcessorにモックを注入してテストする方法

更新日:

Apache CamelのルートをSpringBootで実装して、いざ試験をしようと思ったときにハマったので備忘録も兼ねてメモ。
日本語の情報もあまりないので、きっと何かの役に立つ・・のか??

サンプル用に作ったプロジェクトはこちら

試験対象

今回の試験対象のルートとプロセッサーは下記。
Camelの使い方云々を解説するものではないので、細かい解説は省略。

主なハマりポイントは、

  1. Processorでインジェクションして利用するクラスをモック化する方法がわからない(上記の例ではMyService)
  2. Routerでファイル取得ディレクトリをプロパティファイルから読み込むようにしているとき、テスト用にプロパティの値を差し替えたい
  3. トランザクションを利用するとき、トランザクションマネージャを割り当てないと起動でコケる

といったあたりでしょうか。
そもそも、テストするときに起動するルートを割り当てる方法もSpringと使わない場合は知らなかったので、そこも調べる必要がありましたが。

テストクラスを見ながら、それぞれポイントを列挙していきます。
テストクラスの全容はこちらを見てください。以下ではポイントにフォーカスしていきます。

Processorにモックを注入する

参考となるCamelのページはこちら。adviceWithを利用したらできました。
Route中の特定の箇所をまるっと入れ替えることができる機能です。
上記では、"route-file-from"というIDが付与されたルートの中から、"processor"というIDが付与された箇所をreplace()を用いてモックを注入したprocessorに置き換えています。ここのprocessorは、下記のような感じで、Mockitoを用いて普通にモック化しているものです。argCapは無視してください。

これで、本来利用するはずのProcessorから、モックを注入したテスト用Procssorに差し替えることができました。

プロパティの設定値を差し替える


上記のメソッドをオーバーライドして、上書きするプロパティを設定したオブジェクトをreturnすればOKです。

トランザクションを利用する


CamelContextを生成するメソッドをオーバーライドして、試験用のトランザクションマネージャを突っ込んであげればOKです。
ここで利用しているDummyTransactionManagerは、こんな感じ。これは適当に作ったので、試験の内容によってはちゃんとしたトランザクションマネージャを割り当ててあげましょう。

試験の内容

そんなこんなして諸々設定すると、ようやく試験ができるようになります。

試験の内容は、コメントで書いている通りですね。試験自体はサンプルなので適当です。

まとめ

ハマりポイントとしてはそんな感じですかね。
試験しづらいところではあるので、どれくらい自動試験で担保するのかは難しいところですけど、CamelのTest系のコンポーネントは割と充実しているので割となんでもできちゃいます。
Camelの基本的な使い方とかは、この辺とかこの辺が入門には良いのではないでしょうかね。日本でも、ちらほらと商用で使われている話も耳にするので、もう少し情報が充実しても良いんじゃないのかなぁ・・?

-Java
-,

Copyright© この木なんの木気になる樹 , 2024 AllRights Reserved.