मुद्दा की संक्षिप्त सारांश , ClientInterface
के कार्यान्वयन के आधार पर, जिनमें से 2 हैं। आरईएसटी क्षमताओं को जेएक्स-आरएस का उपयोग करके कार्यान्वित किया जाता है, जो RestEasy-SpringBoot library के माध्यम से आराम से प्रदान किया जाता है।Resteasy स्प्रिंग:</p> <p>मैं एक साधारण बाकी HTTP इंटरफ़ेस, स्प्रिंग बूट, जो एक साधारण पाठ प्रतिक्रिया लौटाता जब <code>GET /app</code> बुला के साथ बनाया लिखा है: गलत एप्लिकेशन इंस्टेंस चलने की अनेक उदाहरणों के साथ परीक्षण के दौरान लोड
मैं भी 3 टेस्ट मैचों, जिनमें से 3 क्योंकि प्रतिक्रिया पहले कार्यान्वयन के बजाय ClientInterface
के दूसरे कार्यान्वयन से आ रही है विफल हो रहा है लिखा है, क्योंकि (मुझे लगता है) Resteasy एप्लिकेशन दृष्टांत मिश्रण है, और इसलिए ग़लत वसंत अनुप्रयोग संदर्भ गलत बीन्स के साथ लोड किया गया है।
नोट: आप नमूना आवेदन here, जो प्रलेखन शामिल रूप में अच्छी तरह
कृपया स्रोत कोड पर एक नज़र डालें एक स्पष्ट चित्र प्राप्त करने के लिए मिल सकता है। यह कोड में पेस्ट करने के लिए बहुत अधिक जगह पर कब्जा करेगा।
अधिक जानकारी:
ClientInterface
जो प्रतिक्रिया बाकी संसाधन द्वारा दिए गए प्रदान की 2 कार्यान्वयन कर रहे हैं। वे client-impl-two
प्रोफ़ाइल का उपयोग कर टॉगल कर रहे हैं। यदि प्रोफ़ाइल मौजूद नहीं है, तो पहला कार्यान्वयन उपयोग किया जाता है, यदि यह मौजूद है, तो दूसरा उपयोग किया जाता है।
पहले और तीसरे परीक्षण पहले कार्यान्वयन से प्रतिक्रिया की अपेक्षा है, और क्योंकि यह client-two-impl
प्रोफ़ाइल उपयोग कर रहा है दूसरा परीक्षण, सेकंड कार्यान्वयन से प्रतिक्रिया की उम्मीद है।
जब मैं IntelliJ से JUnit एकीकरण का उपयोग कर परीक्षण चलाने, तीसरा विफल रहता है:
आप देखेंगे परीक्षण इस तरह के नाम हैं कि यह एक निश्चित निष्पादन आदेश है, जो क्योंकि प्रासंगिक है लागू करता है तीसरा परीक्षण केवल तभी विफल रहता है जब इसे दूसरे के बाद निष्पादित किया जाता है। और यह असफल रहा है क्योंकि इसे दूसरे ClientInterface
कार्यान्वयन, से प्रतिक्रिया मिली है, भले ही तीसरा परीक्षण client-impl-two
प्रोफ़ाइल का उपयोग नहीं कर रहा है।
मैंने क्या किया/अब तक की खोज:
- कभी कभी, चल
./mvnw clean test
भी एक ही त्रुटि परिणाम है, लेकिन मैं एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण - स्प्रिंग ऐप्लिकेशन संदर्भ है प्रदान करने में असमर्थ किया गया है सही ढंग से स्प्रिंग/वसंत बूट द्वारा लोड
- स्प्रिंग बूट सही ढंग से पोर्ट संख्या, और टेस्ट मैचों में आराम ग्राहक injects हमेशा बाकी उदाहरण वे
- करने वाले हैं फोन यह तब होता है जब रीस्टेसी अनुरोध पर ले जाता है, कि यह किसी भी तरह से एप्लिकेशन के गलत उदाहरण को लोड करता है, और इसलिए गलत स्प्रिंग एप्लिकेशन संदर्भ का उपयोग किया जाता है, यही कारण है कि यह गलत प्रतिक्रिया दे रहा है
- यह मुझे पता चला जहां यह सिर्फ संसाधन सेम के लिए
beanFactory
querynig है, और देखने के लिए जो कार्यान्वयन ऊपर आता हैbeanFactory.getBean(ClientInterface.class)
बुला SpringResourceFactory.createResource में एक ब्रेकपाइंट रखने(), और यह के दौरान तीसरे टेस्ट
- यह मुझे पता चला जहां यह सिर्फ संसाधन सेम के लिए
- के लिए गलत था परीक्षण, आवेदन चलाने के एक से अधिक उदाहरण हैं, प्रत्येक अपने स्वयं के पीओ पर आरटी, जो मुझे लगता है कि इस मुद्दे के साथ कुछ करने के लिए
- एक और शाखा है,
jersey-instead-of-resteasy
जिसमें जर्सी को जेएक्स-आरएस कार्यान्वयन के रूप में उपयोग किया जाता है, और जहां परीक्षण सफल होते हैं चाहे वे इंटेलिजे या मेवेन के साथ चलें - एक
DebugFilter
है जिसके साथ मैं जांच करता हूं कि वसंत अनुप्रयोग संदर्भ रीस्टेसी सर्वलेट द्वारा अनुरोध किए जाने से पहले कैसा दिखता है, और यह हमेशा सही होता है (ClientInterface
का सही कार्यान्वयन लोड होता है), चाहे कोई परीक्षण न हो निष्पादित- यह केवल तभी होता है जब तीसरा परीक्षण चलाया जाता है, और जब अनुरोध रीस्टेसी तक पहुंच जाता है, तो गलत ऐप उदाहरण लोड होता है, जैसा कि नोट किया गया है ऊपर अंक
ऊपर अंक के आधार पर में से एक है, मैं एक मजबूत संदेह Resteasy समस्या हो सकती है है।
किसी भी मदद की बहुत सराहना की जाती है।
मैं प्रदान की समाधान की जाँच की है और यह काम करता है! जैसे ही स्टैकओवरफ्लो मुझे देता है, मैं बक्षीस का पुरस्कार दूंगा :)) –
हैलो। इस मुद्दे की रिपोर्ट करने के लिए गेब्रियल धन्यवाद। और @AlessioSoldano इसे ठीक करने के लिए धन्यवाद। मैं फिक्स के साथ रेस्टेसी स्प्रिंग बूट स्टार्टर का एक नया संस्करण जारी करूंगा। – Fabio
संस्करण 2.2.2-रिलीज अभी ठीक के साथ जारी किया गया है। – Fabio