Camel Bean コンポーネントによって参照されるサービスを使用する Grails のプロダクション ルートのユニット テストを作成する必要があります。私の要件は、テストで既存のルートを変更したりコピーしたりすることではありません。
問題は、どういうわけかサービス Bean をモックして、Camel レジストリに追加することです。
「context.registry.registry」オブジェクトで「bind」メソッドを使用してこれを行うことができました。より安全な方法でそれを行う機能はありますか? Camel のバージョンは 2.10、Grails は 2.1
ルートは次のとおりです。
from('direct:validate').to('bean:camelService?method=echo')
CamelService は単純なクラスです。
package com
class CamelService {
def echo(text) {
println "text=$text"
text
}
}
テストは次のとおりです(質問を簡単にするためにのみルートをコピーしました):
package com
import grails.test.mixin.*
import org.apache.camel.builder.RouteBuilder
import org.apache.camel.test.junit4.CamelTestSupport
@TestFor(CamelService)
class RouteTests extends CamelTestSupport {
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from('direct:validate').to('bean:camelService?method=echo')
}
};
}
void testMockBean() throws Exception {
context.registry.registry.bind 'camelService', service
def result = template.requestBody('direct:validate', 'message')
assert result != null
assert result == 'message'
}
}