लोड करने के लिए कैसे, वसंत ऋतु में बूट परीक्षण, बुनियादी वसंत आवेदन-संदर्भ जोड़ने केवल नाम के घटकों?

0

सवाल

मूल

मैं कोशिश कर रहा हूँ, लोड करने के लिए एक परीक्षण के एक वसंत बूट (v2.3.8) आवेदन, केवल नाम के घटकों में एक बुनियादी वसंत आवेदन-संदर्भ. अधिक विशेष रूप से, मैं करना चाहते हैं, लोड करने के लिए एक परीक्षण में, एक वसंत आवेदन-संदर्भ विन्यस्त करता है कि कम से कम प्रवेश, लोड हो रहा है के बाह्य गुणों, मान्यता (के माध्यम से जावा सत्यापन एपीआई), और @Value-plugging के बिना, लेकिन MVC, डेटा जेपीए, आदि. संक्षेप में, मैं परीक्षण करना चाहते हैं, के माध्यम से एक बाधा है-एनोटेट इंटरफेस (उदा. @NotBlank), एक @Service कि व्यायाम केवल स्थानीय फाइल सिस्टम (कोई MVC, डेटा जेपीए, या किसी भी अन्य वसंत बूट परीक्षण "टुकड़ा") और एक डेटा-सदस्य आबादी के माध्यम से @Value.

मैं करने की कोशिश की है, कोई फायदा नहीं हुआ, कई एनोटेशन (और कुछ के अपने निहित विशेषताओं) में, विभिन्न संयोजन-सबसेट: उदाहरण के लिए @SpringBootTest, @Configuration, @ContextConfiguration, @TestConfiguration, @TypeExcludeFilters, आदि. उदाहरण के लिए:

@Validated
public interface SomeService {
    String someMethod (@NotBlank String someParam);
}
...
@Service
public class SomeServiceImpl implements SomeService {

    @Value("${some.value}")
    private String someValue;

    @Override
    public String someMethod(String someParam) {
        // do something with local file-system,
        // with someValue in hand, and
        // knowing someParam not blank
    }
}
...
@SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)
class SomeServiceTests {

    @Autowired
    private SomeService someService;

    @Test
    void throwConstraintViolationException_whenSomeParamNil() {
        assertThrows(
            ConstraintViolationException.class,
            ()->someService.someMethod(new String()));
    }
    ...
}

इस उदाहरण में, विशेषता classes के @SpringBootTest भार उद्धृत क्लास लेकिन obscures के सभी मूल बातें (प्रवेश, सत्यापन, आदि.) मैं कर रहा हूँ कि यह भी मांग की.

निम्नलिखित अंश, से क्रेग दीवारों' "स्प्रिंग बूट में कार्रवाई की है," लगता है कि वास्तव में मैं क्या कर रहा हूँ की मांग है, लेकिन इसकी मुख्य उपकरण (@SpringApplicationConfiguration) अब पदावनत है (और इसकी आधिकारिक तौर पर की सिफारिश की रिप्लेसमेंट - @SpringBootTest - व्यवहार नहीं करता है, उतना ही, कम से कम के बारे विशेषता classes):

हालांकि @ContextConfiguration एक अच्छा काम करता है के साथ लोड हो रहा है वसंत आवेदन संदर्भ में, यह लोड नहीं करता है के साथ यह पूरा स्प्रिंग बूट उपचार...SpringApplication न केवल भार के आवेदन के संदर्भ में, लेकिन यह भी लॉगिंग को सक्षम, लोडिंग के बाहरी गुण (आवेदन पत्र है । गुण या आवेदन.yml), और अन्य सुविधाओं के वसंत Boot. यदि आप का उपयोग कर रहे हैं @ContextConfiguration, आप नहीं मिलेगा, उन सुविधाओं की है । प्राप्त करने के लिए उन सुविधाओं में वापस अपने एकीकरण परीक्षण, आप बाहर स्वैप कर सकते हैं @ContextConfiguration के लिए स्प्रिंग बूट के @SpringApplicationConfiguration:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes=AddressBookConfiguration.class)
public class AddressServiceTests {
...
}

वहाँ, वह "पूरा स्प्रिंग बूट उपचार" लेकिन जोड़ने केवल वर्ग (@Service) वह बताता नहीं है (हर @Component, @Controllerहै , और @Repository अपने डोमेन के).

ऐसा करने के लिए कैसे आज, बिना पदावनत @SpringApplicationConfiguration?

अद्यतन

मैं मूल रूप से कहा गया है कि मेरे नहीं है (क्रेग दीवारों') उदाहरण (अर्थात् @SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)हालांकि , यह भरी हुई उद्धृत वर्ग, छिप के सभी मूल बातें एक आवेदन के संदर्भ में है कि वसंत बूट सामान्य रूप से लोड करने के लिए । के माध्यम से आगे के प्रयोग के लिए, मैं पाया है कि यह बयान गलत था, में है कि नहीं सभी लेकिन, केवल, कुछ की मूल बातें छिप कर रहे हैं, अर्थात् मान्यता (के कार्यान्वयन जावा सत्यापन एपीआई). दूसरे शब्दों में, प्रवेश, लोड हो रहा है के बाह्य गुणों, और @मान-plugging रहे हैं, वास्तव में, लोड/कॉन्फ़िगर किया गया है । मुझे लगता है कि मैं मिल गया है उलझन में, सब के सब मेरे कई permutations/प्रयास करता है ।

1

सबसे अच्छा जवाब

0

के बाद अभी तक अधिक प्रयोग, मैं एक जवाब मिल गया. मैं नहीं कह सकता कि क्या यह सबसे अच्छा जवाब है, लेकिन यह संक्षिप्त और निश्चित रूप से चाल करता है...

import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

// automatically configures validation (implementation of Java Validation API)
@ImportAutoConfiguration(ValidationAutoConfiguration.class)

// obscures/disables any otherwise-automatic web-environment;
// automatically configures logging, loading of external properties, and @Value-plugging;
// and, beyond that, adds to application-context only _cited_ classes/configuration-classes
@SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)// full context loaded, if unqualified

public class SomeServiceTests {
...
}
2021-11-25 08:32:45

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में