मूल
मैं कोशिश कर रहा हूँ, लोड करने के लिए एक परीक्षण के एक वसंत बूट (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/प्रयास करता है ।