使用Mockito在Camel路线中使用的模拟服务

时间:2015-11-27 11:13:48

标签: spring apache-camel mockito spring-data-jpa

我正在尝试模拟服务,以便可以在驼峰路由中使用模拟服务。但是当我尝试使用方法findByStatus时,它会给出这个例外:

Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create route jobRoute at: >>> Transform[bean{camelJobService, method=findByStatus}] <<< in route: Route(jobRoute)[[From[direct:start]] -> [Transform[bean{came... because of org.apache.camel.component.bean.MethodNotFoundException: Method with name: findByStatus not found on bean: Mock for CamelJobService, hashCode: 1172605816 of type: com.sun.proxy.$Proxy104
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1072)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:196)
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:944)
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3245)
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2968)
    at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:172)
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2799)
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2795)
    at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2818)
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2795)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2764)
    at org.apache.camel.test.spring.CamelSpringTestContextLoader$7.execute(CamelSpringTestContextLoader.java:515)
    at org.apache.camel.test.spring.CamelSpringTestHelper.doToSpringCamelContexts(CamelSpringTestHelper.java:92)
    at org.apache.camel.test.spring.CamelSpringTestContextLoader.handleCamelContextStartup(CamelSpringTestContextLoader.java:509)
    at org.apache.camel.test.spring.CamelSpringTestContextLoader.loadContext(CamelSpringTestContextLoader.java:164)
    at org.apache.camel.test.spring.CamelSpringTestContextLoader.loadContext(CamelSpringTestContextLoader.java:87)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
    ... 45 more
Caused by: org.apache.camel.RuntimeCamelException: org.apache.camel.component.bean.MethodNotFoundException: Method with name: findByStatus not found on bean: Mock for CamelJobService, hashCode: 1172605816 of type: com.sun.proxy.$Proxy104
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1642)
    at org.apache.camel.model.language.MethodCallExpression.validateHasMethod(MethodCallExpression.java:247)
    at org.apache.camel.model.language.MethodCallExpression.createExpression(MethodCallExpression.java:204)
    at org.apache.camel.model.language.ExpressionDefinition.createExpression(ExpressionDefinition.java:177)
    at org.apache.camel.model.TransformDefinition.createProcessor(TransformDefinition.java:57)
    at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:534)
    at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:495)
    at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:219)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1069)

我的camel-context.xml:

<bean id="camelJobService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target"> <bean class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.asklytics.camel.db.service.CamelJobService" /> </bean> </property>
</bean>

<camelContext xmlns="http://camel.apache.org/schema/spring">

    <spring:route id="jobRoute" startupOrder="2">
        <spring:from uri="direct:start"/>
        <spring:transform>
            <spring:method ref="camelJobService" method="findByStatus"></spring:method>
        </spring:transform>

        <to uri="mock:result"/>
    </spring:route>
</camelContext>

我知道在mock bean服务上找不到方法findByStatus。但是,我如何模拟服务以便能够找到它?

1 个答案:

答案 0 :(得分:0)

我不认为你可以像那样嘲笑豆子。您只能模拟有意义的端点,因为端点可能不可用。你为什么要嘲笑豆子? 请参阅文档。 http://camel.apache.org/mock.html