Com base na resposta de Alfredos, essa é uma maneira de injetar informações do banco de dados sem chamar o script padrão do banco de dados incorporado. Por exemplo, isso pode ser útil quando você deseja construir o DDL automaticamente para você - pelo menos em testes.
@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;
}
}
Dessa forma, o
runOnce()
é chamado uma vez e apenas uma vez para a execução de teste. Se você fizer isInitialized
um campo de instância (não estático), o método será chamado antes de cada teste. Dessa forma, você pode descartar/repovoar as tabelas, se necessário, antes de cada execução de teste. Observe que essa ainda é uma solução bastante rápida e suja e a maneira sensata de lidar com o banco de dados está de acordo com a resposta de Ralph.