Med udgangspunkt i Alfredos svar er dette en måde at injicere databaseinformation på uden at kalde den indlejrede databases standardscript. For eksempel kan dette være nyttigt, når du automatisk vil bygge DDL'en for dig - i hvert fald i test.
@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;
}
}
På denne måde er runOnce()
metode kaldes én gang og kun én gang for testkørslen. Hvis du laver isInitialized
et instansfelt (ikke-statisk), vil metoden blive kaldt før hver test. På denne måde kan du slippe/genudfylde tabellerne, hvis det er nødvendigt, før hver testkørsel.
Bemærk at dette stadig er en ret hurtig og beskidt løsning og den fornuftige måde at håndtere databasen på er i overensstemmelse med Ralphs svar.