अल्फ्रेडोस उत्तर पर निर्माण, यह एम्बेडेड डेटाबेस की डिफ़ॉल्ट स्क्रिप्ट को कॉल किए बिना डेटाबेस जानकारी को इंजेक्ट करने का एक तरीका है। उदाहरण के लिए, यह तब उपयोगी हो सकता है जब आप अपने लिए डीडीएल को स्वचालित रूप से बनाना चाहते हैं - कम से कम परीक्षणों में।
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContext.xml"})
public class TestClass {
@Autowired
private ApplicationContext ctx;
private JdbcTemplate template;
@Autowired
public void setDataSource(DataSource dataSource) {
template = new JdbcTemplate(dataSource);
}
private static boolean isInitialized = false;
@Before
public void runOnce() {
if (isInitialized) return;
System.out.println("Initializing database");
String script = "classpath:script.sql";
Resource resource = ctx.getResource(script);
JdbcTestUtils.executeSqlScript(template, resource, true);
isInitialized = true;
}
}
इस तरह, runOnce()
परीक्षण चलाने के लिए विधि को एक बार और केवल एक बार कहा जाता है। अगर आप isInitialized
. बनाते हैं एक उदाहरण फ़ील्ड (गैर स्थैतिक), प्रत्येक परीक्षण से पहले विधि को बुलाया जाएगा। इस तरह आप प्रत्येक परीक्षण चलाने से पहले, यदि आवश्यक हो, तालिकाओं को गिरा/पुन:आबाद कर सकते हैं।
ध्यान दें कि यह अभी भी एक त्वरित और गंदा समाधान है और डेटाबेस को संभालने का समझदार तरीका राल्फ के उत्तर के अनुसार है।