2016-07-06 1 views
0

JMS 큐에서 파일을 검색하여 DB에 삽입하는 룰 흐름에 대한 통합 테스트를 작성하려고합니다. DB가 사용 가능하지 않은 경우 (연결 오류) 한 테스트 시나리오가 예외 플로우를 통해 실행 중입니다. 이 테스트에서는 DB 커넥터를 조롱하고 예외를 던지려고합니다. 성공적이라고하지만 DB 커넥터가 조롱되지 흐름 위의 테스트 케이스를 실행하는 경우Munit 조롱 DB 커넥터

@Test 
public void testDBOutageException() throws Exception { 
    MuleEvent event = testEvent(INPUT_VALID_XML); 

    java.net.ConnectException connectException = new java.net.ConnectException("Could not connect to DB!");  
    MessageProcessorMocker dbMocker = whenMessageProcessor("insert").ofNamespace("db");  
    dbMocker.thenThrow(connectException); 

    event = runFlow("thomson-reuters-processFlow", event); 
} 

:

는이 같은 커넥터를 조롱했습니다. 단지 DB에 대한 호출이며 데이터를 삽입합니다. 이것은 내가 성취하고자하는 것이 아닙니다.

내 흐름은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8" ?> 
<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc" xmlns:jdbc="http://www.mulesoft.org/schema/mule/jdbc" xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:jms="http://www.mulesoft.org/schema/mule/jms" 
xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/jdbc http://www.mulesoft.org/schema/mule/ee/jdbc/current/mule-jdbc-ee.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd 
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd"> 
    <context:property-placeholder location="classpath:thomson-reuters-process.properties, classpath:thomson-reuters-process-${env}.properties"></context:property-placeholder> 

    <spring:beans> 
    <spring:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <spring:property name="url" value="${JDBC.url}"></spring:property> 
     <spring:property name="username" value="${JDBC.username}"></spring:property> 
     <spring:property name="password" value="${JDBC.password}"></spring:property> 
     <spring:property name="driverClassName" value="${JDBC.driver}"></spring:property> 
     <spring:property name="initialSize" value="5"></spring:property> 
     <spring:property name="testOnBorrow" value="true"></spring:property> 
     <spring:property name="validationQuery" value="${JDBC.validationQuery}"></spring:property> 
     <spring:property name="maxWait" value="60000"></spring:property> 
     <spring:property name="maxActive" value="50"></spring:property> 
     <spring:property name="removeAbandoned" value="true"></spring:property> 
     <spring:property name="removeAbandonedTimeout" value="300"></spring:property> 
     <spring:property name="logAbandoned" value="true"></spring:property> 
    </spring:bean> 
    </spring:beans> 

    <jms:activemq-connector name="Active_MQ" username="${JMS.User}" password="${JMS.Password}" brokerURL="tcp://${JMS.Host}:${JMS.Port}" validateConnections="true" doc:name="Active MQ"> 
    <reconnect frequency="10000" count="10" /> 
    </jms:activemq-connector> 
    <!-- <db:mysql-config name="MySQL_Configuration" doc:name="MySQL Configuration" 
     database="${DB.Database}" host="${DB.Host}" password="${DB.Password}" port="${DB.Port}" 
     user="${DB.User}"></db:mysql-config> --> 
    <db:generic-config name="DB_Config" dataSource-ref="dataSource" doc:name="DB_Config" /> 
    <flow name="thomson-reuters-processFlow"> 
    <jms:inbound-endpoint queue="${JMS.InQueue}" connector-ref="Active_MQ" doc:name="Retrieve from ActiveMQ JMS"></jms:inbound-endpoint> 
    <set-variable variableName="inboundPayload" value="#[payload]" doc:name="Store inboundPayload"></set-variable> 
    <!-- <logger level="INFO" doc:name="Logger"></logger> <mulexml:schema-validation-filter 
      schemaLocations="test-XSD-schema.xsd" returnResult="true" doc:name="Schema 
      Validation"></mulexml:schema-validation-filter> <logger level="INFO" doc:name="Logger"></logger> --> 
    <logger message="LOGGER 1: Inbound file from JMS, payload is: #[message.payloadAs(String)]" level="INFO" doc:name="Logger"></logger> 
    <splitter expression="#[xpath3('/Report/Data/Row[position()&gt;1]',payload,'NODESET')]" doc:name="Split XML to currency dataset"></splitter> 
    <logger message="LOGGER 2: XML was split to forex data set" level="INFO" doc:name="Logger"></logger> 
    <mulexml:dom-to-xml-transformer doc:name="DOM to XML"></mulexml:dom-to-xml-transformer> 
    <collection-aggregator failOnTimeout="true" doc:name="Build collection of individual currency rates"> 
     <expression-message-info-mapping messageIdExpression="#[message.id]" correlationIdExpression="#[message.correlationId]" /> 
    </collection-aggregator> 
    <logger message="LOGGER 3: Combined forex data in collection" level="INFO" doc:name="Logger"></logger> 
    <db:insert config-ref="DB_Config" bulkMode="true" doc:name="Push xml collection to DB" doc:description="dbConnectorInsert"> 
     <db:dynamic-query> 
     <![CDATA[INSERT INTO `exchange_rates`(`CURRENCY`, `DATE`, `REF_CURRENCY`, `EXCHANGE_RATE`,`CREATED_BY`,`CREATE_DATE`,`CHANGED_BY`,`CHANGE_DATE`,`BUYING_RATE`,`SPECIAL_RATE`) VALUES ('#[xpath3('//CURRENCY')]','#[xpath3('//DATE')]','#[xpath3('//REF_CURRENCY')]','#[xpath3('//EXCHANGE_RATE')]','${System.User}','#[server.dateTime.format('yyyy-MM-dd HH:mm:ss')]', '${System.User}','#[server.dateTime.format('yyyy-MM-dd HH:mm:ss')]','#[xpath3('//BUYING_RATE')]','#[xpath3('//SELLING_RATE')]');]]> 
     </db:dynamic-query> 
    </db:insert> 
    <logger message="LOGGER 4: DB Processing completed, payload is: #[message.payloadAs(String)]" level="INFO" doc:name="Logger"></logger> 
    <catch-exception-strategy doc:name="thomson-reuters-processCatch_Exception_Strategy"> 
     <logger level="INFO" doc:name="Logger"></logger> 
     <set-payload value="#[flowVars.inboundPayload]" doc:name="Set Original Inbound Payload"></set-payload> 
     <message-properties-transformer doc:name="Remove MULE_CORRELATION_ID"> 
     <delete-message-property key="MULE_CORRELATION_ID" /> 
     </message-properties-transformer> 
     <logger message="Exception occured, trying to push message to DLQ, payload is: #[message.payloadAs(String)]" level="INFO" doc:name="Logger"></logger> 
     <jms:outbound-endpoint queue="${JMS.DLQ}" connector-ref="Active_MQ" doc:name="Place on DLQ"></jms:outbound-endpoint> 
    </catch-exception-strategy> 
    </flow> 
</mule> 

어떤 아이디어를이 작품을 만들기 위해?

답변

0

MUnit 1.1.0에 DB Mock이 작동하지 않는 버그가있었습니다. 최근에 릴리스 된 MUnit 1.2.0 버전에서 수정되었으므로 1.2.0을 시도하십시오. MUnit의 어떤 버전을 사용하고 있습니까?

+0

나는-RC2 3.6.0 ' 3.6.0-RC2 org.mule.munit 을 MUNIT 버전을 사용하고 있습니다 MUNIT - 일반 $ {munit.version} 테스트 ' –

+0

이러한 버전 무니에 대한 없습니다 티. 이것을 확인하십시오 - https://docs.mulesoft.com/munit/v/1.2.0/munit-maven-support. –

+0

3.6.2-RC2는 이전의 MUnit의 이전 버전이며 지원되지 않습니다. 최신 버전의 MUnit으로 마이그레이션하는 것이 좋습니다 (가능한 경우 마지막 출시 된 버전으로 마이그레이션). 이전 MUnit 버전을 사용하는 사람들을위한 이전 가이드가 있습니다. 자세한 내용은 https://docs.mulesoft.com/munit/v/1.0.0/munit-1.0.0-migration을 참조하십시오. -안내서 – Dds