2013-01-15 8 views
8

Zaczynam z Camelem i mam problemy z napisaniem testu. Mój przypadek użycia jest dokładnie taki sam jak cfx proxy example. Poza tym, że nie potrzebuję "RealWebservice". Teraz próbuję napisać badanej jednostki (nie test integracji jako dołączone przykładzie), stosując metodę adnotacji:Jak rozpocząć trasę w teście na wielbłądzie z wyśmiewanymi punktami końcowymi

@RunWith(CamelSpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:application-context.xml" }) 
@MockEndpointsAndSkip 
public class RoutesTest { 

@Autowired 
CamelContext camelContext; 

@EndpointInject(uri = "mock:cxf:bean:cxfEndpoint", context = "camelContext") 
MockEndpoint cxfEndpoint; 

@EndpointInject(uri = "mock:log:input", context = "camelContext") 
MockEndpoint logInputEndpoint; 

@EndpointInject(uri = "mock:http:realhostname:8211/service", context = "camelContext") 
MockEndpoint realEndpoint; 

@EndpointInject(uri = "mock:cxf:bean:cxfEndpoint") 
ProducerTemplate producer; 

@Test 
public void testLeleuxMifidRoute() throws InterruptedException { 
    String body = "<blah/>"; 

    cxfEndpoint.expectedBodiesReceived(body); 
    logInputEndpoint.expectedBodiesReceived(body); 
    realEndpoint.expectedBodiesReceived(body); 

    producer.sendBody(body); 

    MockEndpoint.assertIsSatisfied(camelContext); 
} 
} 

cxfEndpoint odbiera komunikat ale inne punkty końcowe nie.

Trasa wygląda następująco (działa gdy uruchamiam go i wysłać wiadomość z SoapUI, oczywiście ja ukrywane IPS i beannames w tym przykładzie):

<endpoint id="callRealWebService" uri="http://realhostname:8211/service?throwExceptionOnFailure=true" /> 
<route> 
    <from uri="cxf:bean:cxfEndpoint?dataFormat=MESSAGE"/> 
    <to uri="log:input?showStreams=true"/> 
    <to ref="callRealWebService"/> 
    <to uri="log:output"/> 
</route> 

Co robię źle? Wszystkie przykłady i inne pytania, które znalazłem, wydają się używać "direct: start" lub zmienić trasę produkcji.

Odpowiedz

4

Jednym ze sposobów, z którego korzystaliśmy z powodzeniem, jest posiadanie różnych plików właściwości do wykonania testu i kodu głównego.

definiujemy wewnątrz wielbłądach kontekście właściwość

<propertyPlaceholder id="properties" 
      location="classpath:META-INF/uri.properties" xmlns="http://camel.apache.org/schema/spring" /> 

W folderze /src/main/resources/META-INF/ mamy plik uri.properties dla głównego kodu i /src/test/resources/META-INF/ możemy mieć uri.properties na wykonanie testu.

Trasa musi być zapisane w nieruchomości zastępczy zamiast rzeczywistych wartości uri, używając notacji {{properties.name}}

<route> 
    <from uri="{{cxf.bean.cxfEndpoint}}"/> 
</route> 

główne uri.properties będzie

cxf.bean.cxfEndpoint=cxf:bean:cxfEndpoint?dataFormat=MESSAGE 

się uri.properties testowe będzie

cxf.bean.cxfEndpoint=direct:start 

Korzystanie z tej konfiguracji n, będziesz mógł łatwo przetestować trasę.

Powiązane problemy