Die beigefügte Anwendung basiert auf Spring Boot, und daher verwende ich Camels "Spring-Boot" -Komponente, um die beiden Frameworks zu integrieren. Wie in der Dokumentation in diesem Spring-Boot-Link vorgeschlagen, implementiere ich meine Camel-Route innerhalb einer @Configuration -Annotierte Klasse, die RouteBuilder :
erweitert.
Code: Select all
@Component
public class MyRestToAmqpRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("jetty:http://my-restful-url")
.process(exchange -> {
// convert the message body from JSON to XML, take some
// incoming header values and put them in the outgoing
// body, etc...
}).to("rabbitmq://my-rabbitmq-url");
}
}
< /code>
Meine Frage beinhaltet, wie Sie diese Übersetzung durchführen, ohne einen tatsächlichen Rastful-Endpunkt oder einen konfigurierten Rabbitmq-Broker zu benötigen? Ich habe viele Online-Beispiele sowie das Camel in Action Buch gelesen ... und es scheint, als wäre es der typische Ansatz für das Testen einer Kamel-Route, die Route in Ihren Unit-Test zu schneiden und eine oder mehrere Endpunkt-URLs mit zu ersetzen. "mock:whatever< /code> ". class = "Lang-Java PrettyPrint-Override">@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Application.class})
public class MyRestToAmqpRouterTest extends AbstractJUnit4SpringContextTests {
@Produce(uri = "jetty:http://my-restful-url")
private ProducerTemplate fakeRest;
@EndpointInject(uri = "rabbitmq://my-rabbit-url")
private MockEndpoint fakeRabbit;
@Test
@DirtiesContext
public void testRouter() throws InterruptedException {
fakeRabbit.expectedMessageCount(1);
fakeRest.sendBodyAndHeader("", "header-1", "some value");
fakeRabbit.assertIsSatisfied();
}
}
< /code>
Ich hoffe, dass Camel diese Endpunkt -URLs aus dem Unit -Test nehmen, sie als Mocks registrieren und dann die Mocks und nicht den realen Endpunkt verwenden würden, wenn der reale Code versucht, diese URLs zu verwenden. < /p>
Ich bin mir jedoch nicht sicher, ob dies möglich ist. Wenn ich die realen URLs im Unit -Test verwende, erhalte ich IllegalArgumentException
Wenn ich ein" verwende "mock:...< /code> "Endpunkt -URL in meinem Unit -Test, dann ist es nutzlos, weil es in der untersuchten Klasse nichts mit der realen Endpunkt -URL zusammenbindet. Daher wird also die reale Endpunkt -URL niemals außer Kraft gesetzt. Wenn der reale Code ausgeführt wird, wird nur der eigentliche Endpunkt als normal verwendet. Hier scheint es eine Möglichkeit zu geben, in einer Klasse gefälschte Wege zu bringen, sodass der in den testenden Code von echten Endpunkten zu verspotten kann, ohne es zu merken.>