Basandosi sulla risposta di Alfredos, questo è un modo per iniettare informazioni sul database senza chiamare lo script predefinito del database incorporato. Ad esempio, questo può essere utile quando vuoi creare automaticamente il DDL per te, almeno nei 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;
}
}
In questo modo, il runOnce()
viene chiamato una volta e solo una volta per l'esecuzione del test. Se crei isInitialized
un campo di istanza (non statico), il metodo verrà chiamato prima di ogni test. In questo modo puoi eliminare/ripopolare le tabelle, se necessario, prima di ogni esecuzione di test.
Si noti che questa è ancora una soluzione piuttosto rapida e sporca e il modo sensato di gestire il database è conforme alla risposta di Ralph.