2017-07-27 1 views
0

私たちには、ラクダルートとビジネスロジックをテストするためのJUnitがいくつかあります.JUnitテストの1つでサーバから応答レスポンスが受信されるまで、ラクダコンテキストを実行する必要があります。 CamelSpringTestSupportを使用しています。問題は他のJUnitがそれ以降実行していないことです。Apache camel Junitはコンテキストを実行し続ける

MyTest.javaはyourcontext.xmlは、以下のようになります

import java.io.File; 

import org.apache.activemq.camel.component.ActiveMQComponent; 
import org.apache.camel.Exchange; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.main.Main; 
import org.apache.camel.test.spring.CamelSpringTestSupport; 
import org.junit.Ignore; 
import org.junit.Test; 
import org.springframework.context.support.AbstractXmlApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.stereotype.Component; 

@Component 
public class MyTest extends CamelSpringTestSupport{ 
    String prop1; 
    Main main; 
    ActiveMQComponent jms; 

    public void setUp() throws Exception { 
     super.setUp(); 
     prop1 = context.resolvePropertyPlaceholders("{{prop1}}");   
     jms = (ActiveMQComponent) context.getComponent("jms"); 

     RouteBuilder builder = new RouteBuilder() { 

      @Override 
      public void configure() throws Exception { 
       from("fromUri") 
       .log("Got a message")    
       .to("file://C:\\Temp\\tempfolder");   
      } 
     };   
     main = new Main();    
     main.addRouteBuilder(builder); 
     main.bind("jms", jms); 
     // add event listener 
     //main.addMainListener(new Events()); 
     // set the properties from a file 
     //main.setPropertyPlaceholderLocations("example.properties"); 
     // run until you terminate the JVM 
     System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n"); 
     main.run(); 
    } 

    @Override 
    protected AbstractXmlApplicationContext createApplicationContext() { 
     return new ClassPathXmlApplicationContext("/yourcontext.xml"); 
    } 

    @Test 
    public void testMoveFile() throws Exception { 
     // create a new file in the inbox folder with the name hello.txt and containing Hello World as body 
     template.sendBodyAndHeader("file://C:\\targetIn", "Hello World", Exchange.FILE_NAME, "hello.txt"); 

     // wait a while to let the file be moved 
     Thread.sleep(2000); 

     // test the file was moved 
     File target = new File("C:\\targetin\\hello.txt"); 
     assertTrue("File should have been moved", target.exists()); 

     // test that its content is correct as well 
     String content = context.getTypeConverter().convertTo(String.class, target); 
     assertEquals("Hello World", content); 
    } 

    @Test 
    public void uploadData() throws Exception{ 
     File target = new File("c:\\input.xml"); 
     assertTrue("File should have been moved", target.exists()); 

     template.sendBody(toUri, target); 
    } 
} 

の下に、私は2つのコンテキストを持つことによって、基本的な間違いをしていることがありますか?

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:camel="http://camel.apache.org/schema/spring" 
     xmlns:broker="http://activemq.apache.org/schema/core" 
     xmlns:jee="http://www.springframework.org/schema/jee" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd 
     http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> 

    <context:component-scan base-package="com.yourpackage" /> 
    <bean id="properties" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer"> 
      <property name="ignoreResourceNotFound" value="true"/> 
      <property name="locations"> 
      <list> 
       <value>classpath:yourproperties.properties</value>        
      </list> 
     </property> 
    </bean> 


    <camel:camelContext id="mytest" useMDCLogging="true" threadNamePattern="#camelId#:#name#-##counter#"> 
     <camel:contextScan /> 
     <camel:jmxAgent id="agent" createConnector="false" /> 
     <camel:template id="camelTemplate" /> 
    </camel:camelContext> 

    <bean id="shutdown" class="org.apache.camel.impl.DefaultShutdownStrategy"> 
     <property name="timeout" value="120" /> 
    </bean> 

    <bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent"> 
     <property name="connectionFactory"> 
      <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory"> 
       <property name="brokerURL" value="tcp://${activemq.host}:${activemq.port}" /> 
      </bean> 
     </property> 
    </bean> 

</beans> 
+2

このような独自のコンテキストを手動で作成するとエラーが発生しやすくなります。 Springはあなたのためにこれを行うJUnitランナーを提供します。これにより、 'setUp()'コードの大半が削減され、エラーのリスクが軽減され、うまく整理されます。 '@RunWith(@RunWith()を使用する方法については、Java設定例でJUnit 4.xを使用したプレーンなSpringテストの下で[Camelのサイト](http://camel.apache.org/spring-testing.html)を見てください。 SpringJUnit4ClassRunner.class) 'を呼び出します。 –

答えて

1

そのコードスニペットは、JUnitテストであれば、私はあなたが@Componentでそれに注釈を付けるだろうなぜわかりません。とにかく

、その後、JUnitのコードは次のように、スプリング支持アノテーションを使用する必要があり、あなたが春を使用していると仮定すると:

@RunWith(CamelSpringJUnit4ClassRunner.class) 
@BootstrapWith(CamelTestContextBootstrapper.class) 
@ContextConfiguration 
public class MyCamelTest { 
    @Autowired 
    protected CamelContext camelContext; 

完全なサンプル:http://camel.apache.org/spring-testing.html

をあなたは春ブーツに続いここのを使用している場合始めるためのサンプル: https://github.com/apache/camel/blob/master/examples/camel-example-spring-boot/src/test/java/sample/camel/SampleCamelApplicationTest.java:完全なサンプルについては

@RunWith(CamelSpringBootRunner.class) 
@SpringBootTest(classes = SpringBootApplication.class) 
public class SpringBootCamelTest { 

    @Autowired 
    private CamelContext camelContext; 
関連する問題