Je dois écrire des tests unitaires pour les routes de production dans Grails qui utilisent des services référencés par le composant Bean de Camel. Mon exigence est de ne ni changer ni copier les routes existantes dans les tests.
Le problème est de simuler d'une manière ou d'une autre le service bean et de l'ajouter au registre de Camel.
J'ai réussi à le faire en utilisant la méthode 'bind' sur l'objet 'context.registry.registry'. Y a-t-il une fonctionnalité pour le faire de manière plus sûre? Version de Camel: 2.10, Grails 2.1
La route est la suivante:
from('direct:validate').to('bean:camelService?method=echo')
CamelService est juste une classe simple:
package com
class CamelService {
def echo(text) {
println "text=$text"
text
}
}
Le test est le suivant (la route a été copiée uniquement pour simplifier la question):
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'
}
}