2015-11-14 7 views
8

चुनता है मैं ग्रैडल प्लगइन के साथ एसटीएस का उपयोग कर स्प्रिंग बूट एप्लिकेशन विकसित कर रहा हूं। हमारे सेलेनियम परीक्षणों को लॉगिन करने से रोकने के लिए, मेरे पास परीक्षणों के लिए एक अलग कॉन्फ़िगरेशन है।एक्लिप्स के माध्यम से स्प्रिंग बूट एप्लिकेशन चलाना परीक्षण कक्षाएं

तो src/test/java/etc में मैं कुछ इस तरह है:

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
@EnableWebSecurity 
public static class SecurityConfig extends WebSecurityConfigurerAdapter 
{ 
    @Override 
    protected void configure(HttpSecurity http) throws Exception 
    { 
     http.authorizeRequests().anyRequest().permitAll(); 
    } 
} 

जबकि src/main/java में मैं एक बराबर वर्ग के लिए लॉग इन आदि कॉन्फ़िगर करता है, सभी पृष्ठों के लिए लॉगिन की आवश्यकता होती है की है।

यदि मैं ग्रैडल प्लगइन (बूटरुन) के माध्यम से एप्लिकेशन चलाता हूं, तो सब ठीक काम करता है।

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

मुझे लगता है कि जब मैं इस तरह से एप्लिकेशन शुरू करता हूं तो टेस्ट क्लास क्लासपाथ में शामिल किया जा रहा है। क्या ऐसा होने से रोकने के लिए कोई आसान तरीका है?

+1

मैं कल्पना कर सकता आप 'इस वर्ग +' @ActiveProfiles को जोड़ने @Profile ("परीक्षण") 'द्वारा इस समाधान कर सकता है (" परीक्षण: घटक विन्यास स्कैन के आधार पर आप एक @ComponentScan को बाहर फिल्टर परिभाषित करने की जरूरत ") परीक्षण पर। इससे उस प्रोफाइल पर बीन कंडिशनल बन जाएगा। Http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-ctx-management-env-profiles – zapl

+0

एक अच्छा संभावित समाधान की तरह दिखता है, हालांकि यहां तक ​​कि परीक्षण कॉन्फ़िगरेशन क्लास में @profile ("test") को जोड़ने के बाद भी जब मैं ऐप चलाता हूं तब भी इसका उपयोग किया जा रहा है। मैं बाद में इसकी जांच करूंगा - धन्यवाद। –

+2

मैं पुष्टि कर सकता हूं कि लगभग निश्चित रूप से समस्या यह है कि रनटाइम क्लासपाथ में 'टेस्ट' चीजें शामिल हैं। यह एक ज्ञात समस्या है हालांकि मुझे नहीं लगता कि इसके लिए कोई मुद्दा टिकट है। यह एक समस्या है जो ग्रेडल के टूलींग मॉडल के कारण 'टेस्ट' और 'रनटाइम' क्लासपाथ के बीच distinuguishing नहीं है। मुझे डर है कि इस समस्या से बचने का सबसे आसान तरीका मैवेन का उपयोग करने के लिए स्विच करना है। मुझे पता है कि m2e/maven यह सही ढंग से करता है। – Kris

उत्तर

2

जब आप ग्रहण से परीक्षण चलाते हैं, तो वर्गपाथ ग्रहण (और मैवेन या ग्रेडल द्वारा नहीं) द्वारा तैयार किया जाता है।

ग्रहण केवल प्रति वर्ग एक वर्गपैथ का उपयोग करता है और निर्भरता क्षेत्रों (जैसे 'संकलन' या 'परीक्षण') के बारे में कुछ भी नहीं जानता है। तो कक्षा में हमेशा एक संदर्भित परियोजना के किसी भी संसाधन होते हैं।

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

0

आप कॉन्फ़िगरेशन कक्षा का परीक्षण करने के लिए @TestComponent जोड़ सकते हैं। ये बीन कॉन्फ़िगरेशन आपके एप्लिकेशन के घटक स्कैन के दौरान छोड़े जाएंगे। excludeFilters = @ComponentScan.Filter(value = TestComponent.class, type = FilterType.ANNOTATION))

+0

यह काम करता है, लेकिन इस दृष्टिकोण के साथ एक समस्या है: आपको उत्पादन में स्प्रिंग टेस्ट क्लास जोड़ना होगा, अन्यथा आपको ClassNotFoundException –

+0

@WellingtonSouza मिलेगा जो सच है। वैकल्पिक रूप से आप परीक्षा कक्षाओं को बाहर करने के लिए regexp अभिव्यक्ति का भी उपयोग कर सकते हैं, उदा।'बहिष्कृत फ़िल्टर = @ घटक स्कैन.फिल्टर (पैटर्न = "। * टेस्ट कॉन्फ़िगरेशन", टाइप = फ़िल्टर टाइप .REGEX) ' – StefanR

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