2012-01-19 18 views
5

यहां डीबी सिर्फ एक उदाहरण है। इसका मतलब है कि इकाई परीक्षण पर्यावरण में कुछ तैयार नहीं किया जा सकता है।एक बीन के साथ एक मार्ग का परीक्षण कैसे करें जो डीबी तक पहुंच जाएगा?

नीचे मार्ग पर विचार करें:

DBBean dbBean = new DBBean(); 
from("direct:test").bean(dbBean).to("direct:someOtherLogic"); 

जब इकाई परीक्षण करते हैं, वहाँ किसी भी दृष्टिकोण उपहास करने के लिए 'dbBean' है? यूनिट टेस्ट में, एक वास्तविक डीबी स्थापित करना मुश्किल है।

आपकी मदद के लिए धन्यवाद।

उत्तर

3

ऊंट में एक परीक्षण किट है, जो आपको परीक्षण से पहले मार्ग में हेरफेर करने की अनुमति देती है। फिर आप मार्ग को छूटे रख सकते हैं, और फिर मार्ग के हिस्सों को प्रतिस्थापित कर सकते हैं, और क्या नहीं। इसका थोड़ा विस्तृत, और यहाँ कार्यक्षमता सलाह-साथ के रूप में अपनी प्रलेखित: http://camel.apache.org/advicewith.html

यह आम तौर पर आसान काम करता है EIPs सौंपा आईडी है के रूप में आप फिर उन आईडी का उल्लेख कर सकते हैं, और कुछ और से बदल दें।

आप जानते हैं कि आप पहली बार BeanDefinition आप कर सकते हैं बदलना चाहते हैं लेकिन अगर:

weaveByType(BeanDefinition.class).selectFirst().replace().to("mock:dbBean"); 

(ऊपर दिए गए लिंक देखें कि सलाह-साथ कैमल टेस्ट किट में के साथ इस का उपयोग करने जैसे ऊंट परीक्षण) जार।

ध्यान दें कि कैमेल टेस्ट किट को बताने की सिफारिश की गई है कि आप सलाह का उपयोग कर रहे हैं, जो आप उस लिंक के नीचे दस्तावेज़ के रूप में करते हैं।

1

आप एक एम्बेडेड डेटाबेस (डर्बी, आदि) का उपयोग कर सकते हैं ... यहाँ एक उदाहरण एक camel-jdbc unit test

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
     <from uri="timer://kickoff?period=10000"/> 
     <setBody> 
      <constant>select * from customer</constant> 
     </setBody> 
     <to uri="jdbc:testdb"/> 
     <to uri="mock:result"/> 
    </route> 
</camelContext> 

    <!-- Just add a demo to show how to bind a date source for camel in Spring--> 
    <jdbc:embedded-database id="testdb" type="DERBY"> 
     <jdbc:script location="classpath:sql/init.sql"/> 
    </jdbc:embedded-database> 

अन्यथा से लिया है, तो आप (का उपयोग करने के DBUnit या Mockito (सेटअप परीक्षण डेटाबेस के लिए) की कोशिश कर सकते एक डीबी कॉल की प्रतिक्रिया का नकल करें)

+1

डीबी इकाई परीक्षण के लिए अच्छा समाधान। हालांकि, कुछ अन्य बीन्स के लिए, पर्यावरण को अनुकरण करना मुश्किल हो सकता है। मुझे लगता है कि बीन का मज़ाक उड़ा एक बेहतर तरीका है। – Javen

+0

हाँ, मैं पूरी तरह से समझता हूं ... मॉकिटो बहुत बढ़िया है अगर आप इसे अपने सेटअप के साथ अच्छा खेल सकते हैं ... अन्यथा, क्लॉस ने कुछ अन्य दृष्टिकोण सुझाए (सलाह के साथ, आदि) जो अच्छी तरह से काम करेंगे ... शुभकामनाएं –

1

यदि आपका डीबीबीन एक इंटरफ़ेस है, तो आपके पास 2 अलग-अलग कार्यान्वयन हो सकते हैं। असली डीबी काम के लिए एक। और अन्य मॉक किए गए यूनिट परीक्षणों के लिए, जहां आप डीबी अनुकरण करते हैं।

तो इसकी सिर्फ अपने इकाई परीक्षण

DbBean db = new MockDbBean() 

अपने सादे जावा कोड के रूप में में एक नकली instantiating की बात। आप

public class MyRouteBuilder extends RouteBuilder { 
    private DbBean dbBean; 

    // getter/setter for dbBean 

    public void configure() throws Exception { 
     from("direct:test").bean(dbBean).to("direct:someOtherLogic"); 
    } 
} 

फिर एक इकाई से इसकी सिर्फ MyRouteBuilder उदाहरण पर एक सेटर का उपयोग कर MockDbBean निर्धारित करने की बात का परीक्षण अपने RouteBuilder कक्षा में एक गेटर/सेटर हो सकता है।

+0

तो मुझे लगता है कि कुंजी बाहर के रास्ते में बीन का पर्दाफाश कर रही है। यूनिट टेस्ट करते समय, नकली बीन को परीक्षण मार्ग में सेट करें। लेकिन क्या ऊंट के संदर्भ से सीधे बीन लाने और इसे नकली बीन द्वारा प्रतिस्थापित करने का कोई तरीका है? इस तरह, मुझे वर्तमान मार्ग को संशोधित करने की आवश्यकता नहीं है और कोई और फ़ील्ड और गेटर/सेटर की आवश्यकता नहीं है। – Javen

संबंधित मुद्दे

 संबंधित मुद्दे