xml - स्प्रिंग टेस्ट के लिए टेस्टकॉन्टेक्ट कैसे बनाएं?




spring testing (2)

इसे सीधे स्रोत / परीक्षण / संसाधनों के तहत प्राप्त करने के लिए इसे इसे बदलें:

@ContextConfiguration({"classpath:/test-applicationContext.xml"})

जब आप कुछ भी निर्दिष्ट नहीं कर रहे हैं, तो स्प्रिंग खोज को एक ही पैकेज में टेस्ट क्लास के रूप में।

मेरे पास अपेक्षाकृत छोटा जावा लाइब्रेरी है जो कुछ दर्जन सेम (कोई डाटाबेस या जीयूआई) लागू नहीं करता है। मैंने एक स्प्रिंग बीन कॉन्फ़िगरेशन फ़ाइल बनाई है, जो अन्य जावा प्रोजेक्ट्स अपने बीन्स को अपने सामान में लगाने के लिए उपयोग करती हैं।

अब मैं पहली बार स्प्रिंग टेस्ट का उपयोग करने के लिए इनमें से कुछ बीन्स को मेरी जनेट टेस्ट क्लासेस में डालने की कोशिश कर रहा हूं।

मैं स्प्रिंग टेस्ट सीखने के लिए आंशिक रूप से यह कर रहा हूं और आंशिक रूप से परीक्षणों को उसी बीन कॉन्फ़िगरेशन फ़ाइल का उपयोग करने के लिए मजबूर कर रहा हूं जो मैं दूसरों के लिए प्रदान करता हूं।

स्प्रिंग दस्तावेज़ीकरण में कहा गया है कि "टेस्टकॉन्टेक्स्ट" क्लास का इस्तेमाल करते हुए मुझे एक एप्लीकेशन कॉन्टैक्ट बनाने की आवश्यकता है जो वसंत के साथ आता है। मेरा मानना ​​है कि यह एक स्प्रिंग एक्सएमएल फ़ाइल में किया जाना चाहिए जो कि मेरे टेस्ट क्लास पर @ContextConfiguration एनोटेशन के माध्यम से संदर्भ करता है I

@ContextConfiguration({"/test-applicationContext.xml"})

हालांकि, फ़ाइल में डालना क्या कोई संकेत नहीं है!

जब मैं अपने परीक्षणों को एक्लिप्स के अंदर से चला जाता हूं, तो यह कह कर "त्रुटियों को आवेदन संदर्भ लोड करने में विफल रहा" ....

अद्यतन करें:

यहां टेस्ट-एप्लिकेशनContext.xml है:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <description>Holds application context for testing of the domain module.</description>

    <!-- Imports the uuid generator bean definitions -->
    <import resource="resources/domain-uuid.xml"/>  
</beans>

मेरी परियोजना निर्देशिका इस तरह है:

domain/
   src/
      main/
         java/
         resources/
      test/
         java/
         resources/ (location of test-applicationContext.xml)

मस्ती के लिए मैंने "एमवीएन क्लीन टेस्ट" के माध्यम से एमवीएन कमांड लाइन से भी बनाने की कोशिश की और मुझे निम्न त्रुटि मिली जो मेरी असली समस्या हो सकती है:

package org.springframework.test.context does not exist

package org.springframework.test.context.junit4 does not exist

cannot find symbol
symbol: class ContextConfiguration
@ContextConfiguration({"/resources/test-applicationContext.xml"})

cannot find symbol
symbol: class SpringJUnit4ClassRunner
@RunWith(SpringJUnit4ClassRunner.class)

ऐप संदर्भ फ़ाइल में क्या रखा जाए जिस तरह से टेस्ट कंटेंटेक्स्ट फ्रेमवर्क काम करता है वह यह है कि आप अपने एकीकरण परीक्षणों के संदर्भ में ऐप वायरिंग का पुन: उपयोग करने की अनुमति देता है। तो अधिकांश भाग के लिए , आपके ऐप संदर्भ कॉन्फ़िग फाइलों में शामिल किए गए परीक्षणों के लिए विशेष कुछ भी नहीं है। यदि आपके नियंत्रक की सेवा बीन निर्भरता आपके ऐप में है, तो यह आपके एकीकरण परीक्षण में भी होगा। यदि आपके डीएओ के पास आपके ऐप में सत्रफ़ीफिचर है, तो आपके एकीकरण परीक्षण के लिए ही। इस तरह आपको सभी चीजों को फिर से तब्दील करने की ज़रूरत नहीं है जब आप एकीकरण परीक्षण लिखते हैं। बहुत ही शांत।

मैंने ऊपर के अधिकांश हिस्से के लिए कहा था क्योंकि कम से कम एक अपवाद है जो मन में आता है। आम तौर पर आपका ऐप एक डाटासर्स का पता लगाने के लिए जेएनडीआई का उपयोग करेगा, लेकिन एक एकीकरण परीक्षण (कम से कम एक आउट-कंटेनर इंटीग्रेशन टेस्ट) में, आपको सामान्य रूप से एक जेडीआईआई वातावरण उपलब्ध नहीं होगा। इसलिए आपको एक अलग फाइल में डेटासार्स बीन सृजन को अलग करना चाहिए, और अपने एकीकरण परीक्षण के लिए अपने लाइव ऐप और गैर-जेएनडीआई संस्करण के लिए एक BasicDataSource संस्करण का उपयोग करें (जैसे सिर्फ एक सीधा BasicDataSource बनाएं)। यहां पूर्व का एक उदाहरण है:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myStoreDS" resource-ref="true"/>

और यहाँ बाद का एक उदाहरण है:

<bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"
    p:driverClassName="${dataSource.driverClassName}"
    p:url="${dataSource.url}"
    p:username="${dataSource.username}"
    p:password="${dataSource.password}" />

ये अलग फाइलों में चलेंगे पहली बार beans-datasource-it.xml में सामान्य ऐप इस्तेमाल के लिए और एक दूसरे के लिए beans-datasource-it.xml एकीकरण परीक्षण के लिए हो सकता है। विन्यास सामान्य ऐप उपयोग और एकीकरण परीक्षणों के लिए आम है (यानी, अधिकांश मामलों में आपके बीन कॉन्फ़िग के विशाल बहुमत) एक सामान्य कॉन्फ़िग फाइल या फाइल में होना चाहिए।

साथ ही, स्प्रिंग 3 में एक नया jdbc नामस्थान दिया गया है जो आपको एक एम्बेडेड डाटाबेस बनाने की अनुमति देता है, जैसे कि एचएसक्यूएलडीबी डाटाबेस या डर्बी डेटाबेस आदि। ऐसा लगता है:

<jdbc:embedded-database id="dataSource">
    <jdbc:script location="classpath:hsql/schema.sql" />
    <jdbc:script location="classpath:hsql/test-data.sql" />
</jdbc:embedded-database>

यह उपरोक्त वर्णित BasicDataSource कॉन्फ़िगरेशन को बदल देगा, यदि आप इसका उपयोग करना चाहते हैं।

त्रुटि क्यों हो रही है आप जिस त्रुटि को देख रहे हैं वह हो रहा है क्योंकि आपका @ContextConfiguration मान अप्रत्यक्ष रूप से यह इंगित करता है कि ऐप संदर्भ फ़ाइल क्लासपाथ पर होना चाहिए। महत्वपूर्ण: /resources टुकड़ा निकालें। यह मावेन इनरहार्ड है; जब यह आपके जार या युद्ध को बनाता है, तो यह resources निर्देशिका की सामग्री को अपनी कक्षा में प्रतिलिपि बनाता है, न कि resources ही। यह मदद करनी चाहिए

संपादित करें:

"कोई प्रतीक नहीं मिला" त्रुटियों को संबोधित करने के लिए, आपको अपने परीक्षण निर्भरता को अपने मावेन पोम में जोड़ना होगा। यह यूजेंट और स्प्रिंग टेस्ट मॉड्यूल भी होगा, दोनों के साथ <scope>test</scope> इसके अलावा अगर आप मॉकिटो की तरह एक नकली ढांचे का उपयोग कर रहे हैं, तो आपको उस निर्भरता (परीक्षण दायरे के साथ) को अपने पोम में भी जोड़ना होगा। कोशिश करो और क्या होता है पर वापस कृपया रिपोर्ट करें।





applicationcontext