2016-09-25 7 views
22

स्प्रिंग-बूट स्प्रिंग प्रोफाइल (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html) का उपयोग करता है जो उदाहरण के लिए अलग-अलग वातावरण के लिए अलग कॉन्फ़िगरेशन की अनुमति देता है। एक तरफ मैं इस सुविधा का उपयोग करता हूं एकीकरण परीक्षण द्वारा उपयोग किए जाने वाले परीक्षण डेटाबेस को कॉन्फ़िगर करना है। मुझे आश्चर्य है कि हालांकि, अपनी प्रोफ़ाइल 'टेस्ट' बनाना और प्रत्येक टेस्ट फ़ाइल में स्पष्ट रूप से इस प्रोफाइल को सक्रिय करना आवश्यक है? अभी मैं इसे निम्नलिखित तरीके से कार्य करें:एकीकरण परीक्षणों के लिए स्प्रिंग-बूट डिफ़ॉल्ट प्रोफ़ाइल

  1. (अब के लिए सिर्फ डेटाबेस नाम) src/मुख्य/संसाधनों
  2. लिखें परीक्षण विशिष्ट वहाँ config अंदर application-test.properties बनाएं
  3. में हर परीक्षण फ़ाइल में शामिल हैं:

    @ActiveProfiles("test") 
    

वहाँ एक होशियार/अधिक संक्षिप्त तरीका है? उदाहरण के लिए एक डिफ़ॉल्ट परीक्षण प्रोफाइल?

संपादित करें 1: यह सवाल वसंत-बूट 1.4.1 के लिए

उत्तर

33

संबंधित है जहां तक ​​मेरा कुछ भी नहीं सीधे आपके अनुरोध को संबोधित पता है - लेकिन मैं एक प्रस्तावों मदद कर सकता है सुझाव है कि कर सकते हैं।

आप अपनी खुद की टेस्ट एनोटेशन का उपयोग कर सकते हैं जो meta annotation@SpringBootTest और @ActiveProfiles("test") शामिल है। इसलिए आपको अभी भी समर्पित प्रोफ़ाइल की आवश्यकता है लेकिन अपने सभी परीक्षणों में प्रोफाइल परिभाषा को बिखराए जाने से बचें।

यह एनोटेशन प्रोफ़ाइल के लिए प्रोफाइल में डिफ़ॉल्ट होगा और आप मेटा एनोटेशन का उपयोग करके प्रोफ़ाइल को ओवरराइड कर सकते हैं।

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
@SpringBootTest 
@ActiveProfiles 
public @interface MyApplicationTest { 
    @AliasFor(annotation = ActiveProfiles.class, attribute = "profiles") String[] activeProfiles() default {"test"}; 
} 
6

आप अपने परीक्षण/संसाधन फ़ोल्डर में एक application.properties फ़ाइल डाल सकते हैं। वहां आप

spring.profiles.active=test 

परीक्षण चलाने के दौरान यह एक डिफ़ॉल्ट परीक्षण प्रोफ़ाइल है।

@RunWith(SpringRunner.class) 
@SpringBootTest() 
@ActiveProfiles("staging") 
public abstract class BaseIntegrationTest { 
} 

कंक्रीट परीक्षण:

public class SampleSearchServiceTest extends BaseIntegrationTest{ 

    @Inject 
    private SampleSearchService service; 

    @Test 
    public void shouldInjectService(){ 
     assertThat(this.service).isNotNull(); 
    } 
} 

यह अनुमति देता है आप और अधिक निकालने के लिए

+0

मैं का उपयोग अगर मैं @ActiveProfiles ("test") सेट करने से बचना चाहता हूं तो यह टेस्टकेस में यह प्रविष्टि। क्या यह आपके लिए काम नहीं करता है? – Compito

+9

यदि मैं परीक्षण चलाते समय 'src/test/resource/application.properties' फ़ाइल बनाता हूं, तो 'src/main/resource/application.properties' सामग्री को अनदेखा किया जाता है। – ciastek

19

यह करने के लिए एक और तरीका है एक आधार (सार) परीक्षण वर्ग है कि अपने वास्तविक परीक्षा कक्षाओं का विस्तार होगा परिभाषित करने के लिए है @ActiveProfiles एनोटेशन की तुलना में। आप विभिन्न प्रकार के एकीकरण परीक्षणों के लिए अधिक विशेष आधार कक्षाओं की कल्पना भी कर सकते हैं, उदाहरण के लिए डाटा एक्सेस लेयर बनाम सेवा परत, या कार्यात्मक विशिष्टताओं के लिए (सामान्य @Before या @After विधियां आदि)।

application.properties (base file) 
application-dev.properties 
application-qa.properties 
application-prod.properties 

और application.properties एक संपत्ति spring.profiles.active उचित फ़ाइल लेने के लिए शामिल हैं:

-1

मेरे मामले में मैं पर्यावरण के आधार पर अलग अलग application.properties, की तरह कुछ है।

अपने एकीकरण परीक्षण के लिए, मैं test/resources के भीतर एक नया application-test.properties फ़ाइल बनाई और @TestPropertySource({ "/application-test.properties" }) टिप्पणी के साथ इस फाइल जो उन परीक्षणों के लिए application.properties मैं अपने जरूरतों के आधार पर करना चाहते हैं उठा के आरोप में है

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