使用mule在模拟活动中模拟数据库计数查询响应时遇到问题

使用mule在模拟活动中模拟数据库计数查询响应时遇到问题,mule,mule-component,mule-el,munit,Mule,Mule Component,Mule El,Munit,我在mule中有db连接器,它有select查询来统计记录的数量,数据库的响应如下: MULE代码段: <db:select config-ref="Oracle_Configuration" doc:name="FetchDetails"> <db:parameterized-query><![CDATA[SELECT COUNT(1) AS COUNT from MAPPER_T where ST_NO=#[flowVars.f

我在mule中有db连接器,它有select查询来统计记录的数量,数据库的响应如下:

MULE代码段:

     <db:select config-ref="Oracle_Configuration" doc:name="FetchDetails">
            <db:parameterized-query><![CDATA[SELECT COUNT(1) AS COUNT from MAPPER_T where ST_NO=#[flowVars.fetchNO] and DATE=SYSDATE]]></db:parameterized-query>
        </db:select>

 <choice doc:name="EvaluateCount">
            <when expression="#[payload[0]['COUNT'] == 0]">
           <logger message="#[payload]" level="INFO" category="DO SOMETHING X" doc:name="Logger"/>
            </when>
 <otherwise>
                    <logger message="#[payload]" level="INFO" category="DO SOMETHING Y" doc:name="Logger"/>
            </otherwise>
        </choice>
在munit实现中,我试图模拟此响应,我使用了MULE的模拟组件,下面是我的代码:

您在mock:then return中的语法无效

你错过了几件事:

缺少MEL表达式开头的磅符号。您应该有如下内容:[……代码在这里……] 地图创建不正确。您需要这样的内容:{COUNT:1} 因此,您的mock:then返回应该如下所示:


我知道你问这个问题已经有一段时间了,但我将为未来的观众回答这个问题。这就是我的工作

通常,来自db connecter的响应是一个哈希映射。您必须引用groovy文件来模拟db响应

模拟示例:

<mock:when messageProcessor="db:select" doc:name="Mock - Evaluate Results">
    <mock:with-attributes>
        <mock:with-attribute name="doc:name" whereValue="FetchDetails"/>
    </mock:with-attributes>
    <mock:then-return payload="#[resultOfScript('FetchDetailsGroovyScript')]"/>
</mock:when>
还包括munit config.xml的以下行以引用groovy脚本

<scripting:script name="FetchDetails" engine="groovy" file="mock-data/Fetch-Details-Groovy-Script.groovy" doc:name="Script"/>
Groovy脚本示例:Fetch-Details-Groovy-script.Groovy

    def map1 = new org.mule.util.CaseInsensitiveHashMap()
map1.put('COUNT',0)


def listOfMap = new LinkedList<org.mule.util.CaseInsensitiveHashMap>()
listOfMap.add(map1)

return listOfMap

抱歉,Jerney,它抛出了一个错误,声明:由:[错误:无法解决的属性或标识符:COUNT]引起的。噢,我想我看到了这个问题。您的代码需要一个列表,我要求您在模拟中返回一个映射。我编辑了我的答案,所以它返回一个包含{COUNT:1}的列表,请尝试一下!你好,杰尼。。我没有遇到由以下原因导致的相同错误:[错误:无法解决的属性或标识符:计数]错误在哪里引发?模拟后有效负载的状态是什么?您好Jerney,在模拟中,正如您所建议的,我使用表达式作为[{COUNT=0}],在db调用之后的mule流中,我有一个选择组件,其中我编写了一个表达式作为[payload[0]['COUNT']==0]检查计数是否大于零,这是munit中失败的地方,但当我在没有munit的情况下执行流时,它会按预期工作。我想在munit测试中将数据库select count查询的响应模拟为1和0,这就是我提出这个问题的原因!!
    def map1 = new org.mule.util.CaseInsensitiveHashMap()
map1.put('COUNT',0)


def listOfMap = new LinkedList<org.mule.util.CaseInsensitiveHashMap>()
listOfMap.add(map1)

return listOfMap