Возникла проблема при макете ответа на запрос подсчета базы данных в фиктивной активности с использованием мула - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть соединитель БД в муле, в котором есть запрос на выборку для подсчета количества записей, а ответ из базы данных выглядит следующим образом:

SNIPPET MULE CODE:

     <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>

Ответ от вызова базы данных с помощью регистратора с mel # [message.payload]

[{COUNT=1}]

В реализации munit я пытаюсь смоделировать этот ответ, и я использовал компонент MOCK MULE, а ниже мой код:

 <munit:test name="api-Happy-Scenario-test-suiteTest" description="MUnit Test">
  	 <mock:when messageProcessor=".*:.*" doc:name="Mock - Evaluate Results">
            <mock:with-attributes>
                <mock:with-attribute name="doc:name" whereValue="#['FetchDetails']"/>
            </mock:with-attributes>
            <mock:then-return payload="#[{COUNT: 0}]"/>
        </mock:when>
               <munit:set payload="#[getResource('json/ResultsRequest.json').asString()]" mimeType="application/json" doc:name="Set Message">
	</munit:set>
        <flow-ref name="post:/results:api-config" doc:name="InvokeResultsService"/>
        <munit:assert-true message="The HTTP Status code is not correct!" condition="#[messageInboundProperty('http.status').is(eq(201))]" doc:name="assert that - http.status eq 201"/>
        <munit:assert-null doc:name="Assert Null Payload"/>
    </munit:test>

Но при выполнении теста я получаю следующее исключение:

Caused by: org.mule.api.expression.ExpressionRuntimeException: Execution of the expression "payload[0]['COUNT']" failed.
Caused by: [Error: java.lang.Character cannot be cast to java.lang.Class]
[Near : {... payload[0]['COUNT'] ....}]
             ^
[Line: 1, Column: 1]

Не могли бы вы помочь мне, как я могу издеваться над ответом. Спасибо !!

1 Ответ

0 голосов
/ 04 сентября 2018

Ваш синтаксис в mock:then-return недействителен.

Вам не хватает пары вещей:

  1. Знак фунта для начала выражения MEL отсутствует. У вас должно быть что-то похожее на это: #[...code goes here...]
  2. Карта создается неправильно. Вы хотите что-то вроде этого: {COUNT: 1}

Так что ваш mock:then-return должен выглядеть так:

<mock:then-return payload="#[[{COUNT: 1}]]"/>

...