एक दृष्टिकोण जो काम करता है वह "डेटा प्रारंभकर्ता" वर्ग बनाना है, इसे एक परीक्षण स्प्रिंग एप्लिकेशन संदर्भ में जोड़ें जिसमें आपका डेटा स्रोत भी है, और इस एप्लिकेशन संदर्भ को अपने परीक्षणों में तार दें। यह इस तथ्य पर निर्भर करता है कि स्प्रिंग परीक्षण आमंत्रण के बीच अनुप्रयोग संदर्भ को कैश करता है।
उदाहरण के लिए, एक परीक्षण सुपर क्लास:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:test-application-context.xml"})
@Transactional
public abstract class DataLoadingTest {
@Autowired
protected DatabaseInitialiser databaseInitialiser;
}
test-application-context.xml
के साथ:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" .../>
<bean class="DatabaseInitialiser">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
और
public class DatabaseInitialiser extends JdbcDaoSupport {
@PostConstruct
public void load() {
// Initialise your database here: create schema, use DBUnit to load data, etc.
}
}
इस उदाहरण में:
- डेटाबेस पर भरोसा रखने वाले सभी परीक्षण
DataLoadingTest
का विस्तार करते हैं;
- वसंत पहले परीक्षण आमंत्रण पर आवेदन संदर्भ शुरू करता है;
- एनोटेशन के माध्यम से यह
DatabaseInitialiser.load()
पर कॉल करता है;
- वसंत एक कैश में अनुप्रयोग संदर्भ रखता है;
- आवेदन संदर्भ से
DatabaseInitialiser
में आगे परीक्षण आमंत्रण तार, जो पहले से ही कैश किया गया है;
- परीक्षण लेनदेनशील हैं, और प्रारंभिक डेटा सेट के अंत में वापस रोल करें।
इसी तरह, DatabaseInitialiser
एक विधि एनोटेट @PostDestroy
पूरे परीक्षण चालन के अंत में किसी भी रोलबैक आवश्यक प्रदर्शन करने के लिए हो सकता है।
वास्तव में, वास्तव में, मैंने समस्या को कैसे हल किया, मैं बस अपना कोड/उत्तर वापस SO में डालना भूल गया। अगले व्यक्ति के लिए ऐसा करने के लिए समय निकालने के लिए धन्यवाद। – HDave
अच्छा लगता है, लेकिन व्यावहारिक रूप से अन्य वर्ग का 'पोस्टपोन्स्ट्रक्ट' डेटाबेसइनिस्टाइज़र के पहले चल रहा है, इसलिए इसका कोई उपयोग नहीं है। किसी भी मदद के लिए धन्यवाद। –
@ संयुक्त अभिव्यक्ति: क्या आप उस पर विस्तार कर सकते हैं? तुम्हारा कौन सा वर्ग मतलब है? मेरे उदाहरण में, स्प्रिंग टेस्ट क्लास से पहले डेटाबेस प्रारंभकर्ता को प्रारंभ करता है, जो प्रश्न में उल्लिखित कैस में काम करता है। – Kkkev