0

我正在尝试创建简单的骆驼测试蓝图,但无法继续。我可以使用路线进行正常的骆驼测试,但是当我尝试使用骆驼测试蓝图时,我遇到了异常。我认为缺少某些配置。我只通过引用 Apache camel 站点创建了这个测试用例,但它不起作用。缺了点什么。

我的POM:

<properties>
    <camel-version>2.17.0</camel-version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-test-blueprint</artifactId>
        <version>${camel-version}</version>
        <scope>test</scope>
    </dependency>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <version>2.4.0</version>
        </plugin>
    </plugins>
</build>

我的测试课:

package com.test.routes;

import org.apache.camel.Exchange;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.test.blueprint.CamelBlueprintTestSupport;
import org.junit.Test;

//tag::example[]
//to use camel-test-blueprint, then extend the CamelBlueprintTestSupport class,    
//and add your unit tests methods as shown below.
public class DebugBlueprintTest extends CamelBlueprintTestSupport {

    private boolean debugBeforeMethodCalled;
    private boolean debugAfterMethodCalled;

    // override this method, and return the location of our Blueprint XML file to be used for testing
    @Override
    protected String getBlueprintDescriptor() {
        return "OSGI-INF/blueprint/route.xml";
    }

    // here we have regular JUnit @Test method
    @Test
    public void testRoute() throws Exception {
        System.out.println("*** Entering testRoute() ***");

        // set mock expectations
        //getMockEndpoint("mock:a").expectedMessageCount(1);
        getMockEndpoint("mock:vm:inputFile1").expectedMessageCount(1);

        // send a message
        //template.sendBody("direct:start", "World");
        template.sendBody("vm:inputFileEndpointTest", "Hello World");

        // assert mocks
        assertMockEndpointsSatisfied();

        // assert on the debugBefore/debugAfter methods below being called as we've 
        enabled the debugger
        assertTrue(debugBeforeMethodCalled);
        assertTrue(debugAfterMethodCalled);
    }

    @Override
    public boolean isUseDebugger() {
        // must enable debugger
        return true;
    }

    @Override
    protected void debugBefore(Exchange exchange, org.apache.camel.Processor processor, ProcessorDefinition<?> definition, String id, String label) {
        log.info("Before " + definition + " with body " + exchange.getIn().getBody());
        debugBeforeMethodCalled = true;
    }

    @Override
    protected void debugAfter(Exchange exchange, org.apache.camel.Processor processor, ProcessorDefinition<?> definition, String id, String label, long timeTaken) {
        log.info("After " + definition + " with body " + exchange.getIn().getBody());
        debugAfterMethodCalled = true;
    }
}
//end::example[]

当我试图运行它时,我遇到了以下异常:

java.lang.IncompatibleClassChangeError: Class   org.apache.felix.connect.felix.framework.ServiceRegistrationImpl$ServiceReferenceImpl 
does not implement the requested interface org.osgi.resource.Capability
at org.apache.felix.connect.felix.framework.capabilityset.CapabilitySet.addCapability(CapabilitySet.java:63)
at org.apache.felix.connect.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java:124)

在正常的骆驼测试中它工作正常,但在骆驼蓝图测试中我得到了上面的异常。非常感谢任何有助于克服这一点的帮助。

4

1 回答 1

2

在使用骆驼蓝图测试支持测试我的路线时,我遇到了同样的问题。正如克劳斯在评论中建议的那样,在我从 osgi 核心版本 4.3.1 切换到 5.0.0 后,错误消失了,简单的测试通过了:

<dependency>
    <groupId>org.osgi</groupId>
    <artifactId>org.osgi.core</artifactId>
    <version>5.0.0</version>
</dependency>

我很确定这是因为功能接口是在 osgi 版本 5 中引入的:

https://osgi.org/javadoc/r5/core/org/osgi/resource/Capability.html

顺便说一句,我也在运行骆驼 2.17,并且有一个几乎与你相同的测试类。

于 2018-09-14T14:36:36.117 回答