Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como preencher o banco de dados apenas uma vez antes dos métodos @Test no teste de primavera?


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.