在骡子中触发模拟石英端点

时间:2014-02-19 22:12:48

标签: java mocking mule quartz-scheduler

我是Mule的新手,我无法找到如何在Mule中从Java触发Quartz Endpoint,尤其是在单元测试的上下文中。

首先,位于Mule内的Quartz API在哪里?我在Mule网站上找不到这个。但是,在Quartz网站上,我发现了“http://quartz-scheduler.org/api/2.1.0/”,这似乎是一般的Quartz API。这个API和Mule使用的API有什么区别吗?如果没有,在我将"./MuleStudio_3.4.0/plugins/org.mule.tooling.server.3.4.0.ee_3.4.0.201312031922/mule/mule/mule-transport-quartz-3.4.0.jar"的jar文件添加到我的构建路径后,Mule Studio无法解析“org.quartz”,这是Quartz API的核心包。如果存在差异,我需要知道Mule使用的Quartz API。

以下是我要测试的XML:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:mongo="http://www.mulesoft.org/schema/mule/mongo" xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:core="http://www.mulesoft.org/schema/mule/core" version="EE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/mongo http://www.mulesoft.org/schema/mule/mongo/2.0/mule-mongo.xsd
http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<quartz:connector name="QuartzConnName" validateConnections="true" doc:name="Quartz"/>
<flow name="flow_name" doc:name="flow_name">
<quartz:inbound-endpoint jobName="QuartzJobName" cronExpression="${cron.start}" repeatInterval="0" responseTimeout="10000" connector-ref="QuartzConnName" doc:name="Scheduler">
            <quartz:event-generator-job/>
        </quartz:inbound-endpoint>
</flow>
</mule>

内部Mule服务器版本为3.4,Mule Studio版本为3.4.0。

3 个答案:

答案 0 :(得分:2)

除非你在MuleSoft开发这种传输工作,否则我真的看不到测试Quartz端点的价值。您应该仅测试自己的流量和组件。

如果您只想在FunctionalTestCase @Test方法中使用Quartz入站调度程序触发流,则可以使用一些虚拟消息直接调用流:

Flow flow = (Flow) getFlowConstruct("myFlow1");
MuleEvent event = getTestEvent("", flow);
MuleEvent result = flow.process(event);
String returnData = result.getMessage().getPayloadAsString();

答案 1 :(得分:0)

答案 2 :(得分:0)

  1. 我将Quartz端点添加到全局端点列表中。

  2. 在我的流程中,我随后在通用入站端点中引用该端点。

  3. 我使用了与其名称相同的VM端点     inbound-endpoint的ref属性。
  4. 在测试中,我刚刚通过发送空消息来​​启动流程 VM端点。
  5. 以下是我所做的一个例子。

    全局连接器文件

    <quartz:connector name="quartz_connector" validateConnections="true" doc:name="Quartz"/>
    

    全球端点文件

    <quartz:endpoint name="QUARTZ_ENDPOINT_NAME" jobName="JOB_NAME" cronExpression="${cron.start}" repeatInterval="0" responseTimeout="10000" connector-ref="quartz_connector" doc:name="Scheduler">
            <quartz:event-generator-job/>
        </quartz:endpoint>
    

    流量

    <flow name="some_flow" doc:name="some_flow">
            <inbound-endpoint ref="QUARTZ_ENDPOINT_NAME" doc:name="QUARTZ_ENDPOINT_NAME_DOC"/>
        </flow>
    

    全局测试端点和连接器文件

    <vm:endpoint name="QUARTZ_ENDPOINT_NAME" path="VM_PATH_ATTRIBUTE_VALUE" exchange-pattern="request-response"/>
    

    JUnit测试

    @Test
    public void testSend() throws Exception
    {
        MuleClient client = muleContext.getClient();
    
        Map<String,Object> noMsg = new HashMap<String, Object>();
    
        //Start the process by sending a message to the Quartz "Queue"
        MuleMessage response = client.send("vm://VM_PATH_ATTRIBUTE_VALUE",new String(""), noMsg);
    }