S'appuyant sur la réponse d'Alfredos, il s'agit d'un moyen d'injecter des informations dans la base de données sans appeler le script par défaut de la base de données intégrée. Par exemple, cela peut être utile lorsque vous souhaitez créer automatiquement le DDL pour vous - au moins dans les tests.
@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;
}
}
De cette façon, le runOnce()
La méthode est appelée une et une seule fois pour l'exécution du test. Si vous faites isInitialized
un champ d'instance (non statique), la méthode sera appelée avant chaque test. De cette façon, vous pouvez supprimer/remplir les tables, si nécessaire, avant chaque test.
Notez qu'il s'agit toujours d'une solution plutôt rapide et sale et que la manière sensée de gérer la base de données est conforme à la réponse de Ralph.