Opierając się na odpowiedzi Alfredosa, jest to sposób na wstrzyknięcie informacji z bazy danych bez wywoływania domyślnego skryptu wbudowanej bazy danych. Na przykład może to być przydatne, gdy chcesz automagicznie zbudować DDL dla siebie - przynajmniej w testach.
@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;
}
}
W ten sposób runOnce()
Metoda jest wywoływana raz i tylko raz dla uruchomienia testowego. Jeśli zrobisz isInitialized
pole instancji (niestatyczne), metoda zostanie wywołana przed każdym testem. W ten sposób możesz usunąć/ponownie wypełnić tabele, jeśli to konieczne, przed każdym uruchomieniem testu.
Zauważ, że jest to nadal dość szybkie i brudne rozwiązanie, a rozsądny sposób obsługi bazy danych jest zgodny z odpowiedzią Ralpha.